dplyr-多种汇总功能 [英] dplyr - Multiple summary functions

查看:66
本文介绍了dplyr-多种汇总功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为一个数据帧计算多个统计信息。



我尝试了 dplyr summarise_each 。但是,结果以平坦的单行返回,并以函数名作为后缀。



有没有直接的方法-使用 dplyr 或基数r-我可以在数据框中获取结果

  library(dplyr)
$,将列作为数据框的列,将行作为汇总函数? b $ b df = data.frame(A =样本(1:100,20),
B =样本(110:200,20),
C =样本(c(0,1), 20,replace = T))

df%>%summarise_each(funs(min,max))
#A_min B_min C_min A_max B_max C_max
#1 13117 0 98 188 1

#所需格式
摘要(df)
#ABC
#最低:13.00分钟:117.0分:0.00
#第一位置:34.75第一位置:134.2第一位置:0.00
#中位数:45.00中位数:148.0中位数:1.00
#均值:52.35均值:149.9均值:0.65
#第3名:62.50第3名:168.8第3名:1.00
#最高:98.00最多:188.0最大:1.00


解决方案

为什么不仅仅使用 apply summary

  sapply(df,摘要)

给出:



<最低报价>

  ABC 
1.00 112.0 0.00
第一区23.75 134.5 0.00
中位数57.00 148.5 1.00
均值50.15 149.9 0.55
第三级77.50 167.2 1.00
最高94.00 191.0 1.00


要恢复数据框,只需将<在 data.frame()中调用code> sapply : data.frame(sapply(df,摘要) )。如果要在列中保留摘要统计名称,则可以使用 rownames(df) df $ rn<-rownames(df)提取它们或使用 data.table 中的 keep.rownames 参数:

 库(data.table)
dt<-data.table(sapply(df,摘要),keep.rownames = TRUE )

给出:


 > dt 
rn A B C
1:最低。 11.00 113.0 0.0
2:第一区21.50 126.8 0.0
3:中位数55.00 138.0 0.5
4:均值53.65 145.2 0.5
5:第三级83.25 160.5 1.0
6:最高98.00 193.0 1.0



I am trying to calculate multiple stats for a dataframe.

I tried dplyr's summarise_each. However, the results are returned in a flat, single-row with the function's name added as a suffix.

Is there a direct way - using dplyr or base r - where I can get the results in a data frame, with the columns as the data frame's columns and the rows as the summary functions?

library(dplyr)

df = data.frame(A = sample(1:100, 20), 
                B = sample(110:200, 20), 
                C = sample(c(0,1), 20, replace = T))

df %>% summarise_each(funs(min, max)) 
# A_min B_min C_min A_max B_max C_max
# 1    13   117     0    98   188     1

# Desired format
summary(df)
# A               B               C       
# Min.   :13.00   Min.   :117.0   Min.   :0.00  
# 1st Qu.:34.75   1st Qu.:134.2   1st Qu.:0.00  
# Median :45.00   Median :148.0   Median :1.00  
# Mean   :52.35   Mean   :149.9   Mean   :0.65  
# 3rd Qu.:62.50   3rd Qu.:168.8   3rd Qu.:1.00  
# Max.   :98.00   Max.   :188.0   Max.   :1.00  

解决方案

Why not just simply use sapply with summary?

sapply(df, summary)

gives:

            A     B    C
Min.     1.00 112.0 0.00
1st Qu. 23.75 134.5 0.00
Median  57.00 148.5 1.00
Mean    50.15 149.9 0.55
3rd Qu. 77.50 167.2 1.00
Max.    94.00 191.0 1.00

To get a dataframe back, just wrap the sapply call in data.frame(): data.frame(sapply(df, summary)). If you want to keep summary statisticnames in a column, you can extract them with rownames(df) with df$rn <- rownames(df) or use the keep.rownames-parameter from data.table:

library(data.table)
dt <- data.table(sapply(df, summary), keep.rownames = TRUE)

which gives:

> dt
        rn     A     B   C
1:    Min. 11.00 113.0 0.0
2: 1st Qu. 21.50 126.8 0.0
3:  Median 55.00 138.0 0.5
4:    Mean 53.65 145.2 0.5
5: 3rd Qu. 83.25 160.5 1.0
6:    Max. 98.00 193.0 1.0

这篇关于dplyr-多种汇总功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆