dplyr-多种汇总功能 [英] dplyr - Multiple summary functions
问题描述
我正在尝试为一个数据帧计算多个统计信息。
我尝试了 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屋!