繁体   English   中英

在基于多列的条件下使用dplyr mutate

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM