Значения фреймов данных условного замещения R

Я хочу обновить столбец dataframe (df $ d) с результатом математической операции над одним или несколькими другими столбцами (df $ b, df $ c), обусловленным значением другого столбца (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

Спасибо за любой совет.

3 ответа

data.table этого используйте 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]


Попробуй это:

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


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

будет делать трюк. Это решение не зависит от существования столбца d. Следовательно, вам не нужно инициализировать столбец нулями.

licensed under cc by-sa 3.0 with attribution.