在mutate函数中使用先前的值

时间:2018-05-15 10:37:15

标签: r dplyr

我有一张桌子:

table<- data.frame(a = rep(100, 8),
                   b = seq(from = 0.2, by = 0.1, length.out = 8))

我想要获得的是具有值的列c:

  1. 对于第一行,请选择* b
  2. 对于第二行,请前一行 c ,将其添加到第二行 a ,然后与 b 相乘。因此,((100 * 0.2)+100)* 0.3 = 36.这个逻辑对于 其余的行。因此,对于第三行,我会:(100 + 36)* 0.4 = 54.4。
  3. 我尝试过类似下面的代码,但我不能引用mutate中的新列。

    table %>% mutate(c = (a + ifelse(is.na(lag(c), 0, lag(c)))) * b)
    

    一些提示?

    感谢:!)

1 个答案:

答案 0 :(得分:1)

首先关闭:table是用户变量的不良名称,因为它对应于保留的基本R函数。

以下是使用for循环的解决方案。

(只是为了抢占任何for循环异议:我们不是在这里动态增长一个对象,而是改变预先初始化的条目,因此for循环会很快;这不是说没有更快的方式......):

# Initialise
df <- transform(df, c = a * b);

# Calculate c for rows 2..
for (i in 2:nrow(df)) df$c[i] <- (df$c[i - 1] + df$a[i]) * df$b[i];
df;
#    a   b        c
#1 100 0.2  20.0000
#2 100 0.3  36.0000
#3 100 0.4  54.4000
#4 100 0.5  77.2000
#5 100 0.6 106.3200
#6 100 0.7 144.4240
#7 100 0.8 195.5392
#8 100 0.9 265.9853

样本数据

df <- data.frame(
    a = rep(100, 8),
    b = seq(from = 0.2, by = 0.1, length.out = 8))