绑定R中多个列表的对应数据框元素(带gapply功能)
Binding corresponding data frame elements of multiple lists in R (with gapply for function)
我有一个函数可以输出 3 个数据帧的列表。举个例子:
tfunction<-function(x){
d1a<-data.frame(a=1*x$variable[1],b=2*x$variable[1])
d1b<-data.frame(c=letters[x$variable[1]],d=3*x$variable[1])
d1c<-data.frame(e=4*x$variable[1],f=letters[x$variable[1]])
l1<-list(d1a,d1b,d1c)
return(l1)
}
然后我想将该函数应用于我数据集中的不同组。假设在这个玩具示例中,我的数据框是:
df<-data.frame(variable=c(1,2,3),other=c(4,5,6))
我想要的输出是:
[[1]] a b
1 2
2 4
3 6
[[2]] c d
a 3
b 6
c 9
[[3]] e f
4 a
8 b
12 c
通常,当我的函数输出单个数据帧时,我通过以下方式执行此操作:
library(nlme)
do.call(rbind.data.frame, gapply(df, groups=df$variable, FUN=tfunction))
但是,因为我的函数输出是数据帧列表,而不是单个数据帧,所以这不起作用。我知道我可以通过以下方式合并两个数据框列表:
mapply(rbind, list1, list2)
但是,我不知道如何结合 gapply 来执行此操作。我的尝试:
mapply(rbind, gapply(z, groups=z$variable, FUN=function))
导致所有数据帧都被编译成一个列表。我怎样才能让 R 将每个相应的数据帧绑定到一个包含 3 个数据帧的最终列表中? (或者,如果有人有比 gapply 更好的方法来按组应用函数然后合并数据框,我也欢迎!)感谢您的帮助!
我成功了!我确信有一种更优雅的方法可以做到这一点,但以下似乎可以完成这项工作:
Reduce(function(x,y) Map(rbind, x, y),gapply(df, groups=df$variable, FUN=tfunction))
我有一个函数可以输出 3 个数据帧的列表。举个例子:
tfunction<-function(x){
d1a<-data.frame(a=1*x$variable[1],b=2*x$variable[1])
d1b<-data.frame(c=letters[x$variable[1]],d=3*x$variable[1])
d1c<-data.frame(e=4*x$variable[1],f=letters[x$variable[1]])
l1<-list(d1a,d1b,d1c)
return(l1)
}
然后我想将该函数应用于我数据集中的不同组。假设在这个玩具示例中,我的数据框是:
df<-data.frame(variable=c(1,2,3),other=c(4,5,6))
我想要的输出是:
[[1]] a b
1 2
2 4
3 6
[[2]] c d
a 3
b 6
c 9
[[3]] e f
4 a
8 b
12 c
通常,当我的函数输出单个数据帧时,我通过以下方式执行此操作:
library(nlme)
do.call(rbind.data.frame, gapply(df, groups=df$variable, FUN=tfunction))
但是,因为我的函数输出是数据帧列表,而不是单个数据帧,所以这不起作用。我知道我可以通过以下方式合并两个数据框列表:
mapply(rbind, list1, list2)
但是,我不知道如何结合 gapply 来执行此操作。我的尝试:
mapply(rbind, gapply(z, groups=z$variable, FUN=function))
导致所有数据帧都被编译成一个列表。我怎样才能让 R 将每个相应的数据帧绑定到一个包含 3 个数据帧的最终列表中? (或者,如果有人有比 gapply 更好的方法来按组应用函数然后合并数据框,我也欢迎!)感谢您的帮助!
我成功了!我确信有一种更优雅的方法可以做到这一点,但以下似乎可以完成这项工作:
Reduce(function(x,y) Map(rbind, x, y),gapply(df, groups=df$variable, FUN=tfunction))