R:我正在尝试将 rollmean(zoo) 应用于列表中多个数据框中的特定列

R: I'm trying to apply rollmean(zoo) to a particular column in several dataframes which are in a list

重现:

df1 <- data.frame(X = c(0:9), Y = c(10:19))  
df2 <- data.frame(X = c(0:9), Y = c(10:19))  
df3 <- data.frame(X = c(0:9), Y = c(10:19))

list_of_df <- list(A = df1, B = df2, C = df3)  
list_of_df

我正在尝试将 zoo 中的 rollmean 函数应用于此数据帧列表中的每个 'Y' 列。 我已经尝试 lapply 但没有成功,似乎无论我以哪种方式旋转它,都无法绕过指定你想在某个时候应用的数据框。

这是数据帧之一

roll_mean <- rollmean(list_of_df$A, 2)
roll_mean

显然这行不通:

roll_mean1 <- rollmean(list_of_df, 2)
roll_mean1

我也试过这个: 子集(可能不是必需的)

Sub1 <- lapply(list_of_df, "[", 2)
roll_mean1 <- rollmean(Sub1, 2)
roll_mean1

似乎没有办法不用 在 rollmean 函数中指定特定的数据帧

lapply(list_of_df), function(x) rollmean(list_of_df, 2))

for 循环?也没有成功

For (i in list_of_df) {roll_mean1 <- rollmean(Sub1, 2)
    Exp 
}

说的很明显,但我对一般的编码还很陌生,希望得到一些指导。 我突然想到,即使它确实有效,被平均的列也会比数据帧的其余部分长一个值;我该如何解决这个问题?

这个问题一方面说它只想对 Y 执行 rollmean,另一方面说这有效 roll_mean <- rollmean(list_of_df$A, 2) 所有 列都有效。

1) 假设您要将 rollmean 应用于所有列:

像这样使用lapply

lapply(list_of_df, rollmean, 2)

这也有效:

for(i in seq_along(list_of_df)) list_of_df[[i]] <- rollmean(list_of_df[[i]], 2)

2)如果只想应用到Y列:

lapply(list_of_df, transform, Y = rollmean(Y, 2, fill = NA))

for(i in seq_along(list_of_df)) {
  list_of_df[[i]]$Y <- rollmean(list_of_df[[i]]$Y, 2, fill = NA)
}