2013-08-23 275 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的存在。因此,您不需要用零初始化列。