我有一个输出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更好的方法来按组应用函数,然后合并数据帧,我也欢迎!)谢谢你的帮助!
https://stackoverflow.com/questions/41304369
复制相似问题