如果没有NA,以下代码将按预期工作:如果第一行中有任何2,则新变量的值为2;如果没有,我想检查是否有任何值为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
答案 0 :(得分:0)
如果你这样做,它就可以正常工作:
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()
产生的矩阵。