R根据多个条件更新data.frame列,使用ifelse的问题

时间:2018-10-10 05:56:58

标签: r

请注意,以下代码不起作用。但这表达了我的主要目的。

if(df$col_1 > 2 & df$col_1 > 3) {df$col_4 = value_1}  

然后我尝试了ifelse

df$col_4 = ifelse(df$col_1 > 2 & df$col_1 > 3, value_1, 0)

但是,使用ifelse的问题在于,只要df$col_4结果为(df$col_1 > 2 & df$col_1 > 3)FALSE的原始值将为零。

df$col_4的原始值应保留在(df$col_1 > 2 & df$col_1 > 3) == FALSE的位置。

我都不喜欢nested ifelse,因为那看起来很烂,阅读不友好。

是否有类似sql update的方式,仅在多个条件导致TRUE的情况下才更新值?

1 个答案:

答案 0 :(得分:1)

如所评论,您可以使用:

df$col_4 = ifelse (df$col_1> 2 & df$col_1 >3, value_1, df$col_4 )

与此有关的一个潜在问题是您正在动态更新df$col_4,这可能会使跟踪错误/错误行为变得更加困难。我建议您将结果存储在新列中(如果您不想有很多新列,则可以在df之外)。我什至会添加向量df$condition <- df$col_1> 2 & df$col_1>3。这样一来,您就可以一目了然地控制结果。

df$condition <- df$col_1> 2 & df$col_1>3
df$col_5 = ifelse (df$condition, value_1, df$col_4 )