将创建列功能应用于列表r

时间:2015-07-16 16:41:36

标签: r function apply

我是使用应用和功能的新手,我感到困惑和沮丧。我有2个不同的数据框列表,当条件满足与第二个相关时,我需要向第一个添加一定数量的列。下面是第一个列表的结构,其中任何一个站都有一个数据帧,每个df每个压力有两个或更多列:

> str(KDzlambdaEG)
List of 3
$ 176:'data.frame':    301 obs. of  3 variables:
..$ 0 : num [1:301] 0.186 0.182 0.18 0.181 0.177 ...
..$ 5 : num [1:301] 0.127 0.127 0.127 0.127 0.127 ...
..$ 20: num [1:301] 0.245 0.241 0.239 0.236 0.236 ...
$ 177:'data.frame':    301 obs. of  2 variables:
..$ 0 : num [1:301] 0.132 0.132 0.132 0.13 0.13 ...
..$ 25: num [1:301] 0.09 0.092 0.0902 0.0896 0.0896 ...
$ 199:'data.frame':    301 obs. of  2 variables:
..$ 0 : num [1:301] 0.181 0.182 0.181 0.182 0.179 ...
..$ 10: num [1:301] 0.186 0.186 0.185 0.183 0.184 ...

另一方面,我有第二个列表,其中包含我需要在第一个列表的每个数据帧的每一列之后添加的列数:

> str(dif)
List of 3
[[176]]
[1]  4 15 28
[[177]]
[1] 24 67
[[199]]
[1]  9 53

我使用了出现在的append_col函数尝试了很多东西: How to add a new column between other dataframe columns?

for (i in 1:length(dif)){
A<-lapply(KDzlambdaEG,append_col,rep(list(NA),dif[[i]][1]),after=1)
}

但到目前为止似乎没有任何工作......我在这里寻找答案,但很难找到具体的新人。

1 个答案:

答案 0 :(得分:0)

尝试:

indxlst <- lapply(dif, function(x) c(1, x[-length(x)]+1, x[length(x)]))
newdflist <- lapply(indxlst, function(x) data.frame(matrix(0, 2, sum(x))))
for(i in 1:length(newdflist)) {
  newdflist[[i]][indxlst[[i]]] <- KDzlambdaEG[[i]]
}

可重复数据测试

df1 <- data.frame(x=1:2, y=c("Jan", "Feb"), z=c("A", "B"))
df3 <- df2 <- df1[,-3]
KDzlambdaEG <- list(df1,df2,df3)

x1 <- c(4,15,28)
x2 <- c(24,67)
x3 <- c(9, 53)
dif <- list(x1,x2,x3)

indxlst <- lapply(dif, function(x) c(1, x[-length(x)]+1, x[length(x)]))
newdflist <- lapply(indxlst, function(x) data.frame(matrix(0, 2, sum(x))))
for(i in 1:length(newdflist)) {
  newdflist[[i]][indxlst[[i]]] <- KDzlambdaEG[[i]]
}
newdflist