ID <- 1:6
math <- c("YES","NO","YES","NO",NA,NA)
history <- c(NA,NA,"NO","NO","YES",NA)

dt <- data.frame(ID, math, history)

  ID math history
1  1  YES    <NA>
2  2   NO    <NA>
3  3  YES      NO
4  4   NO      NO
5  5 <NA>     YES
6  6 <NA>    <NA>

我想增加一列("通过"),如下所示

  1. 如果一个学生至少有一次说"是":"是"

  2. 如果学生没有得到"是"

    • 如果两名受试者都缺少数据:NA
    • 如果其中一个主题为"否":"否"

因此,这些列将如下所示:

> dt
  ID math history pass
1  1  YES    <NA>  YES
2  2   NO    <NA>   NO
3  3  YES      NO  YES
4  4   NO      NO   NO
5  5 <NA>     YES  YES
6  6 <NA>    <NA> <NA>

我试着用

dt$pass <- ifelse(rowSums(dt[,-1]=="YES",na.rm=T)>0,"YES","NO")

这是代码,但很棘手

如果我输入na.rm=FALSE,则只考虑同时拥有这两个科目数据的学生.

在我的数据中,我有很多专栏,不仅仅是数学和历史.

推荐答案

一个简单的base解决方案是

dt$pass <- apply(dt[-1], 1, \(x) sort(x, dec = TRUE)[1])

# > dt
#   ID math history pass
# 1  1  YES    <NA>  YES
# 2  2   NO    <NA>   NO
# 3  3  YES      NO  YES
# 4  4   NO      NO   NO
# 5  5 <NA>     YES  YES
# 6  6 <NA>    <NA> <NA>

dplyr当量为

library(dplyr)

dt %>%
  rowwise() %>%
  mutate(pass = sort(c_across(-1), dec = TRUE)[1]) %>%
  ungroup()

R相关问答推荐

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

terra nearest()仅为所有`to_id`列返回NA

如何利用模型函数在格图中添加双曲/指数曲线

R中插入符号训练函数的中心因子和尺度因子预测

一小时满足条件的日期的 Select

在数组索引上复制矩阵时出错

提取一个列表中单个列的重复观察结果R

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

R-按最接近午夜的时间进行筛选

将多个列值转换为二进制

如何在PrePlot()中将多个元素设置为斜体

如何将这个小列表转换为数据帧?

如何在反曲线图中更改X标签

仅当后续值与特定值匹配时,才在列中回填Nas

R将函数参数传递给ggploy

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

在使用ggplot2的情况下,如何在使用coord_trans函数的同时,根据未转换的坐标比来定位geom_瓷砖?

识别部分重复行,其中一行为NA,其重复行为非NA

使用显式二元谓词子集化sfc对象时出错

如何系统地根据柱的位置对柱进行操作?