考慮下面的示例數據拆分使用dplyr(或其他方式)
library(dplyr)
tmp <- mtcars %>%
group_by(cyl) %>%
summarise(mpg_sum = list(summary(mpg)))
使得mpg_sum
包含分含有列表分爲多個列的數據幀列中,第一四分位數,中值,平均值,第三四分位,和變量mpg
的變量最大值爲cyl
。
如何使用dplyr將此列解壓至6列,列名適當,否則?
考慮下面的示例數據拆分使用dplyr(或其他方式)
library(dplyr)
tmp <- mtcars %>%
group_by(cyl) %>%
summarise(mpg_sum = list(summary(mpg)))
使得mpg_sum
包含分含有列表分爲多個列的數據幀列中,第一四分位數,中值,平均值,第三四分位,和變量mpg
的變量最大值爲cyl
。
如何使用dplyr將此列解壓至6列,列名適當,否則?
我們可以使用data.table
。轉換 'data.frame' 到 'data.table'(as.data.table(mtcars)
),通過「共青團分組,我們得到 '英里' 的summary
並將其轉換爲list
library(data.table)
as.data.table(mtcars)[, as.list(summary(mpg)), by = cyl]
# cyl Min. 1st Qu. Median Mean 3rd Qu. Max.
#1: 6 17.8 18.65 19.7 19.74 21.00 21.4
#2: 4 21.4 22.80 26.0 26.66 30.40 33.9
#3: 8 10.4 14.40 15.2 15.10 16.25 19.2
或者使用只dplyr
,在'cyl'分組後,我們使用do
進行與上面相同的操作。
library(dplyr)
mtcars %>%
group_by(cyl) %>%
do(data.frame(as.list(summary(.$mpg)), check.names=FALSE))
# cyl Min. 1st Qu. Median Mean 3rd Qu. Max.
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 4 21.4 22.80 26.0 26.66 30.40 33.9
#2 6 17.8 18.65 19.7 19.74 21.00 21.4
#3 8 10.4 14.40 15.2 15.10 16.25 19.2
或者用purrr
library(purrr)
mtcars %>%
slice_rows("cyl") %>%
select(mpg) %>%
by_slice(dmap, summary, .collate= "cols")
(或其他方式)選項使用sapply()
:
t(sapply(split(mtcars$mpg, mtcars$cyl), summary))
或'do.call(rbind,by(mtcars $ mpg,mtcars $ cyl,FUN = summary)) ' – akrun
另一個選項
with(data = mtcars,by(mpg,cyl,FUN = summary))
至於評論,你也可以使用tidy
功能從包broom
:
library(broom)
mtcars %>% group_by(cyl) %>% do(tidy(summary(.$mpg)))
# Source: local data frame [3 x 7]
# Groups: cyl [3]
#
# cyl minimum q1 median mean q3 maximum
# (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
# 1 4 21.4 22.80 26.0 26.66 30.40 33.9
# 2 6 17.8 18.65 19.7 19.74 21.00 21.4
# 3 8 10.4 14.40 15.2 15.10 16.25 19.2
你也可以使用'庫(掃帚); mtcars%>%group_by(cyl)%>%do(tidy(summary(。$ mpg)))' –
請問您可以將此作爲答案。我總是對掃帚感興趣。 – Alex
主題變化:'mtcars%>% group_by(cyl)%>%summarize(summary = list(broom :: tidy(summary(mpg))))%>%tidyr :: unnest()' – alistaire