R 将具有不同列的Lappy结果放入一个数据帧

R 将具有不同列的Lappy结果放入一个数据帧,r,lapply,rbind,R,Lapply,Rbind,我正在处理一个数据集,希望对一些变量进行描述性统计,并将它们放在一个数据框中。 我可以处理这样的情况: dt<-data.frame('X1'=rnorm(10), 'X2'=rnorm(10)) temp<-do.call(rbind, lapply(dt, summary)) 在这种情况下,rbind将不再工作。我确实意识到,当数据帧具有不同的列时,rbnd.fill可以执行行绑定,但将每个变量的结果传输到数据帧中,然后通过rbind.fill将它们组合在

我正在处理一个数据集,希望对一些变量进行描述性统计,并将它们放在一个数据框中。 我可以处理这样的情况:

dt<-data.frame('X1'=rnorm(10),
           'X2'=rnorm(10))
temp<-do.call(rbind, lapply(dt, summary))
在这种情况下,rbind将不再工作。我确实意识到,当数据帧具有不同的列时,rbnd.fill可以执行行绑定,但将每个变量的结果传输到数据帧中,然后通过rbind.fill将它们组合在一起。fill会有点单调乏味,而且我确实相信,在R具有强大功能的情况下,有一种单命令解决方案

希望有人能在这方面帮助我,你的时间和知识将不胜感激

您可以将rbind.fill与tridy from broom package结合起来,一次完成,即

plyr::rbind.fill(lapply(dt, function(i) broom::tidy(summary(i))))
#    minimum         q1     median        mean         q3   maximum na
#1 -1.621968 -0.7001894 -0.2062857  0.06791479  0.5987752 2.4195609 NA
#2 -2.061762 -1.3925008 -1.1702881 -0.94991206 -0.9249380 0.6052219  1
您可以将rbind.fill与tridy from broom package结合起来,一次完成,即

plyr::rbind.fill(lapply(dt, function(i) broom::tidy(summary(i))))
#    minimum         q1     median        mean         q3   maximum na
#1 -1.621968 -0.7001894 -0.2062857  0.06791479  0.5987752 2.4195609 NA
#2 -2.061762 -1.3925008 -1.1702881 -0.94991206 -0.9249380 0.6052219  1
使用tidyverse方式的答案,即purrr主要:

dt% 地图扫帚::整洁 >最小q1中值平均值q3最大na >1-0.798480 0.5869163 0.89381256 0.9626454 1.6942529 2.218769 NA > 2 -1.331122 -1.0149286 0.05946167 -0.1562312 0.5235401 1.061640 1 对于您正在做的事情,您还可以对ropensci社区正在进行的关于Skimer包的工作感兴趣。它不是在CRAN上,而是在github上。它旨在简化汇总统计的使用,与tidyverse方法兼容

开发工具::安装\u githubropenscilabs/skimer dt%>%Skimer::skim >数值变量 >一个tibble:2x13 >var类型缺失完整n平均sd最小值 > >1 X1数字0 10 0.9626454 0.9001430-0.798480 >2 X2数字1 9 10-0.1562312 0.8539957-1.331122 > ... 还有5个变量:`25%分位数`,中位数,`75% >分位数`,最大值,历史 使用tidyverse方式的答案,即purrr主要:

dt% 地图扫帚::整洁 >最小q1中值平均值q3最大na >1-0.798480 0.5869163 0.89381256 0.9626454 1.6942529 2.218769 NA > 2 -1.331122 -1.0149286 0.05946167 -0.1562312 0.5235401 1.061640 1 对于您正在做的事情,您还可以对ropensci社区正在进行的关于Skimer包的工作感兴趣。它不是在CRAN上,而是在github上。它旨在简化汇总统计的使用,与tidyverse方法兼容

开发工具::安装\u githubropenscilabs/skimer dt%>%Skimer::skim >数值变量 >一个tibble:2x13 >var类型缺失完整n平均sd最小值 > >1 X1数字0 10 0.9626454 0.9001430-0.798480 >2 X2数字1 9 10-0.1562312 0.8539957-1.331122 > ... 还有5个变量:`25%分位数`,中位数,`75% >分位数`,最大值,历史 仅使用plyr包,您就可以将强制作为一系列函数与plyr::rbind.fill一起使用,以实现与原始帖子类似的代码。plyr::rbind.fill需要一个data.frame,因此我们首先将命名向量的输出转换为列表,然后使用as.data.frame.list转换为data.frame

这是回报

        Min.   X1st.Qu.     Median        Mean    X3rd.Qu.      Max. NA.s
1 -1.3228095 -0.9366220  0.3869426  0.05838389  0.85474059 1.1721839   NA
2 -0.8421435 -0.5083617 -0.4801625 -0.29357112 -0.02549078 0.4506287    1
仅使用plyr包,您就可以将强制作为一系列函数与plyr::rbind.fill一起使用,以实现与原始帖子类似的代码。plyr::rbind.fill需要一个data.frame,因此我们首先将命名向量的输出转换为列表,然后使用as.data.frame.list转换为data.frame

这是回报

        Min.   X1st.Qu.     Median        Mean    X3rd.Qu.      Max. NA.s
1 -1.3228095 -0.9366220  0.3869426  0.05838389  0.85474059 1.1721839   NA
2 -0.8421435 -0.5083617 -0.4801625 -0.29357112 -0.02549078 0.4506287    1

非常感谢@Sotos,一个非常好的解决方案非常有效。我会把它当作一个答案!非常感谢@Sotos,一个非常好的解决方案非常有效。我会把它当作一个答案!谢谢@cderv,第一个解决方案非常有效。还没有测试第二个。虽然我无法回答,但我还是要把它提出来。我想说的是,Skimer现在在CRAN上。它有一个函数skim_to_wide,返回单个数据帧,其中不适用于数据类型的统计信息设置为NA。所有变量都是字符,因此格式正确。感谢@cderv,第一个解决方案非常有效。还没有测试第二个。虽然我无法回答,但我还是要把它提出来。我想说的是,Skimer现在在CRAN上。它有一个函数skim_to_wide,返回单个数据帧,其中不适用于数据类型的统计信息设置为NA。所有变量都是字符,因此格式正确。感谢@Imo,这是一个优雅的单行解决方案。从未意识到这种操作。您可以看到大量的as。在R中键入as的函数族。在控制台中,然后按TAB键。谢谢@Imo,优雅的单线解决方案。从未意识到这种操作。您可以看到大量的as。在R中键入as的函数族。在控制台中,然后按TAB键。
do.call(plyr::rbind.fill, lapply(dt, function(x) as.data.frame.list(summary(x))))
        Min.   X1st.Qu.     Median        Mean    X3rd.Qu.      Max. NA.s
1 -1.3228095 -0.9366220  0.3869426  0.05838389  0.85474059 1.1721839   NA
2 -0.8421435 -0.5083617 -0.4801625 -0.29357112 -0.02549078 0.4506287    1