繁体   English   中英

如何根据 R 中不同列的值在数据框的列中分配新值?

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

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