在 R 中定义函数时沿数据框列使用 for 循环

Using for-loops along a data frame column when defining a function in R

我想定义一个函数,将新列添加到数据框并通过循环现有列的条目来计算其条目。它应始终从下一行的条目中减去当前行的条目。新列应称为 y:

example_df <- data.frame(x = runif(10))
fun <- function(df, a, b) {
  df[, b] <- rep(NA, length(df[, a]))
  for (i in 1:(length(df[, a]) - 1)) {
    df[, b[[i]]] <- df[, a[[i + 1]]] - df[, a[[i]]]
  }
  return(df)
}

fun(example_df, "x", "y")

这应该 return 具有新 b 列的数据框,其中包含除最后一行以外的所有行的计算条目,它应该是 NA。 但是,我收到以下消息 returned:

Error in a[[i + 1]] : subscript out of bounds
Called from: `[.data.frame`(df, , a[[i + 1]])

我无法弄清楚问题所在,但我猜索引不知何故不起作用。感谢您提供的所有帮助!

您不需要 for 循环来执行此操作。您可以使用 dplyr 包中的 mutatelead 函数:

library(dplyr)
set.seed(1234)

example_df <- data.frame(x = runif(10))

example_df %>% 
  mutate(y = lead(x, 1) - x)

那会给你这个:

           x          y
1  0.3873464  0.2171617
2  0.6045081  0.3849549
3  0.9894630 -0.1876334
4  0.8018296 -0.3385969
5  0.4632327 -0.2864295
6  0.1768032  0.5489654
7  0.7257686 -0.2135999
8  0.5121687  0.4478171
9  0.9599858 -0.5048904
10 0.4550954         NA