1

別の列 (df$a) の値を条件として、1 つ以上の他の列 (df$b、df$c) に対する数学演算の結果でデータフレーム列 (df$d) を更新したいと考えています。

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]

3 行目は、df$d の期待値を生成します。これをもっと簡潔に書く方法はありますか?論理インデックスを繰り返す必要がないオプションに特に関心があります。

たとえば、このスタイルの式は Python/Pandas で機能し、代入演算子の左側に '[df$a > 0]' のインスタンスを 1 つだけ必要とします。

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))

トリックを行います。このソリューションは、列の存在に依存しませd。したがって、列をゼロで初期化する必要はありません。

于 2013-08-24T06:22:26.290 に答える