R 高效地对行进行迭代,以动态/顺序地填充下一行的变量

R 高效地对行进行迭代,以动态/顺序地填充下一行的变量,r,loops,dplyr,R,Loops,Dplyr,我试图动态填充一个变量,这需要我引用行 给出了三列:时间、组和val 我想填充第3、4、7和8行的val,它们最初是NA 这是我的玩具数据: df <- expand.grid(time = rep(c(1,2,3,4)), group = rep(c("A", "B"))) df$val <- c(50,40,NA,NA) df > df time group val 1 1 A 50 2 2 A 40 3 3

我试图动态填充一个变量,这需要我引用行

给出了三列:时间val

我想填充第3、4、7和8行的val,它们最初是NA

这是我的玩具数据:

df <- expand.grid(time = rep(c(1,2,3,4)), group = rep(c("A", "B")))
df$val <- c(50,40,NA,NA)

df

> df
     time group val
  1    1     A  50
  2    2     A  40
  3    3     A  NA
  4    4     A  NA
  5    1     B  50
  6    2     B  40
  7    3     B  NA
  8    4     B  NA
依此类推,直到每个组的最后一行,由时间和组变量定义


我希望避免使用循环和引用行索引来实现这一点,我更喜欢呆在dplyr中,因为我的其余脚本都在dplyr生态系统中。有没有一种有效的方法来实现这一点?

这不是最干净的解决方案,但它可以完成任务:

df2 = df %>%
    arrange(group, time) %>%
    mutate(val = if_else(is.na(val), (lag(val, n=1) + lag(val, n=2))/2.0, val)) %>%
    mutate(val = if_else(is.na(val), (lag(val, n=1) + lag(val, n=2))/2.0, val))

再说一次,这并不漂亮,但似乎很管用。希望这有助于您从中开始。

您可以执行类似于
df$val[is.na(df$val)]的操作。在我的情况下,somevalue必须按顺序填充,所以我不清楚这种方法如何工作?
df2 = df %>%
    arrange(group, time) %>%
    mutate(val = if_else(is.na(val), (lag(val, n=1) + lag(val, n=2))/2.0, val)) %>%
    mutate(val = if_else(is.na(val), (lag(val, n=1) + lag(val, n=2))/2.0, val))