2013-08-23 277 views
1

我想用一个或多个其他列(df $ b,df $ c)上的数学运算的结果来更新数据帧列(df $ d),取决于另一列列(df $ a)。R条件替换数据帧值

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 /大熊猫并且只需要一个“[DF $ A> 0]”上的赋值运算符的左侧实例:

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

谢谢你为任何和所有的建议。

回答

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

试试这个:

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

会做的伎俩。此解决方案确实是而不是取决于列d的存在。因此,您不需要用零初始化列。