我有一个数据框,然后将其拆分为三个(或任意数量)的数据框。
我要做的是自动处理每个数据框中的每一列并添加现有变量的滞后版本。
例如,如果每个 data.frame 中有三个变量(V1、V2、V3),我想自动(没有硬编码)添加 V1.lag、V2.lag 和 V3.lag。
这是我到目前为止所拥有的,但我现在被困住了。
任何帮助都会受到高度赞赏。
dd<-data.frame(matrix(rnorm(216),72,3),c(rep("A",24),rep("B",24),rep("C",24)),c(rep("J",36),rep("K",36)));
colnames(dd) <- c("v1", "v2", "v3", "dim1", "dim2");
dd;
dds <- split(dd, dd$dim1);
dds;
# Missing step 1: Automatically create v1.lag, v2.lag, v3.lag, etc (if required)
最后,我想将三个数据框合并为一个大数据框,其中将包含新创建的变量。
# Missing step 2: Merge data frames into single data frame
任何帮助将不胜感激。
编辑:在评论部分,我询问了移动平均线而不是滞后。这是解决方案:
ma <- function(x, f=c(1,1,1)){as.numeric(filter(x, f, sides=1)/length(f));}
foo <- function(df, f = c(1,1,1)) {
nums <- sapply(df, is.numeric); ## which are numeric vars
nams <- paste(names(df)[nums], "ma", length(f), sep = "."); ## generate new names foo.ma
df[, nams] <- lapply(which(nums), function(id, df, f) ma(df[[id]], f = f), df = df, f = f); ## apply ma to each numeric variable
df; ## return
}