[英]Using dplyr mutate with conditions based on multiple columns
如果没有NA,则以下代码将按预期工作:如果第一行中包含2,则新变量的值为2;否则,值为0。 如果不是,我要检查是否有任何值是1; 如果不是,则检查是否为0。 如果不是,那么所有都必须是NA。
一旦将NA添加到数据帧中,它将不再起作用,而且我似乎无法弄清原因:
V1 <- c(NA,1,2,0,0)
V2 <- c(0,0,2,1,1)
V3 <- c(NA,0,2,1,0)
V <- cbind(V1,V2,V3)
V <- mutate(V,V4 = ifelse(V1 == 2|V2==2|V3==2, 2,
ifelse(V1==1|V2==1|V3==1, 1, ifelse(V1==0|V2==0|V3==0,0,NA))))
预期输出:
V1 V2 V3 V4
1 NA 0 NA 0
2 1 0 0 1
3 2 2 2 2
4 0 1 1 1
5 0 1 0 1
实际输出:
V1 V2 V3 V4
1 NA 0 NA NA
2 1 0 0 1
3 2 2 2 2
4 0 1 1 1
5 0 1 0 1
如果您这样做,它将按预期工作:
mutate(V, V4 = case_when(
V1 == 2 | V2 == 2 | V3 == 2 ~ 2,
V1 == 1 | V2 == 1 | V3 == 1 ~ 1,
V1 == 0 | V2 == 0 | V3 == 0 ~ 0
))
此外,你应该使用一个data.frame()
data_frame()
或tibble()
代替cbind()
,使对象v更符合dplyr功能,预计数据帧,而不是一个矩阵(这是什么鬼由cbind()
产生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.