我想用一个或多个其他列(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
感谢您提供任何建议。
答案 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
的存在。因此,您不需要用零初始化列。