【发布时间】:2022-06-10 17:38:51
【问题描述】:
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>
我想做一个额外的列(“通过”)如下
-
如果学生至少有一次“是”:“是” (不管其他主体是否缺少数据。)
-
如果学生没有得到“是”
- 如果两个受试者都缺少数据: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=TRUE,他们认为 NA 是“否”
(ID 6 学生将是“否”)
如果我输入na.rm=FALSE,则只考虑同时拥有两个学科数据的学生。
在我的数据中,我有很多列,不仅是数学和历史。
【问题讨论】: