[英]How to assign a new value in a column of a dataframe based on a value from a different column in R?
我有一个数据框
P1 P2 P3_1 P3_2
1 3 1 30
2 NA NA NA
2 NA NA NA
2 NA NA NA
1 1 1 10
如果 P1 = 2,我试图将所有 NA 设置为 0 而不是 NA。
我的代码是
df$P2 <- ifelse(df$P1 == 2, df$P2, 0)
哪个返回这个
P1 P2 P3_1 P3_2
1 0 1 30
2 NA NA NA
2 NA NA NA
2 NA NA NA
1 0 1 10
当 P1 = 1 时,似乎 P2 变为 0。 我知道我可以让所有 NA 都为 0,但这种趋势是特定于值为 2 时的。我不想将任何其他 NA 更改为 0。
ifelse()
语法哪里出错了? 有没有更好的方法来做到这一点并包括我需要的所有三列?
当我们在ifelse
创建逻辑时,'yes' 条件应该是 0,'no' 应该是 'df$P2'。 或者没有ifelse
,也可以直接赋值
df$P2[with(df, P1 == 2 & is.na(P2))] <- 0
-输出
> df
P1 P2 P3_1 P3_2
1 1 3 1 30
2 2 0 NA NA
3 2 0 NA NA
4 2 0 NA NA
5 1 1 1 10
df <- structure(list(P1 = c(1L, 2L, 2L, 2L, 1L), P2 = c(3, 0, 0, 0,
1), P3_1 = c(1L, NA, NA, NA, 1L), P3_2 = c(30L, NA, NA, NA, 10L
)), row.names = c(NA, -5L), class = "data.frame")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.