1

我想用对一个或多个其他列(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 > 0]' 实例:

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

感谢您的任何建议。

4

3 回答 3

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]
于 2013-08-23T22:30:26.607 回答
1

试试这个:

transform(df, d = ifelse(a > 0, b/c, d))
于 2013-08-23T22:50:36.030 回答
0
transform(df, d = b / c * (a > 0))

will do the trick. This solution does not depend on the existence of the column d. Hence, you don't need to initialize the column with zeroes.

于 2013-08-24T06:22:26.290 回答