在 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
包中的 mutate
和 lead
函数:
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
我想定义一个函数,将新列添加到数据框并通过循环现有列的条目来计算其条目。它应始终从下一行的条目中减去当前行的条目。新列应称为 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
包中的 mutate
和 lead
函数:
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