R条件替换数据帧值

时间:2013-08-23 21:44:57

标签: r indexing dataframe

我想用一个或多个其他列(df $ b,df $ c)的数学运算结果更新数据帧列(df $ d),条件是另一列的值(df $ a)

set.seed(55)
df <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10), d = 0)
df$d[df$a > 0] <- df$b[df$a > 0] / df$c[df$a > 0]

第三行产生df $ d的预期值。有没有办法更简洁地写这个?我对那些不需要重复逻辑索引的选项特别感兴趣。

例如,这种表达方式适用于Python / Pandas,只需要一个'[df $ a&gt;]实例。 0]'在赋值运算符的左侧:

df$d[df$a > 0] <- df$b / df$c

感谢您提供任何建议。

3 个答案:

答案 0 :(得分:6)

改为使用data.table,你的生活将会更好:

library(data.table)
dt = data.table(df) # or construct it same way: dt = data.table(a = rnorm(10),...)

dt[a > 0, d := b/c]

答案 1 :(得分:1)

试试这个:

transform(df, d = ifelse(a > 0, b/c, d))

答案 2 :(得分:0)

transform(df, d = b / c * (a > 0))

会做到这一点。此解决方案取决于列d的存在。因此,您不需要用零初始化列。