使用dplyr的summarise_each为每个函数返回一行?

Ale*_*ock 20 r dplyr

我正在使用dplyr的summarise_each将函数应用于多列数据.一件好事是你可以同时应用多个功能.事实上,令人讨厌的是输出是具有单行的数据帧.它似乎应该返回与函数一样多的行,列数与列总结的列数相同.

library(dplyr)  
default <- 
  iris %>% 
  summarise_each(funs(min, max), matches("Petal"))
Run Code Online (Sandbox Code Playgroud)

这回来了

> default
  Petal.Length_min Petal.Width_min Petal.Length_max Petal.Width_max
1                1             0.1              6.9             2.5
Run Code Online (Sandbox Code Playgroud)

我更喜欢像

library(reshape2)
desired <- 
  iris %>% 
  select(matches("Petal")) %>% 
  melt() %>% 
  group_by(variable) %>% 
  summarize(min=min(value),max=max(value)) %>%
  t()
Run Code Online (Sandbox Code Playgroud)

返回一些接近的东西(不是数据帧,但你们都明白了)

> desired
         [,1]           [,2]         
variable "Petal.Length" "Petal.Width"
min      "1.0"          "0.1"        
max      "6.9"          "2.5" 
Run Code Online (Sandbox Code Playgroud)

在summarise_each中有一个选项可以做到这一点吗?如果没有,哈德利,你介意加入吗?

dic*_*koa 24

您可以实现组合dplyrtidyr包的类似输出.这些方面的东西可以提供帮助

library(dplyr)
library(tidyr)

iris %>%
  select(matches("Petal")) %>%
  summarise_each(funs(min, max)) %>%
  gather(variable, value) %>%
  separate(variable, c("var", "stat"), sep = "\\_") %>%
  spread(var, value)
##   stat Petal.Length Petal.Width
## 1  max          6.9         2.5
## 2  min          1.0         0.1
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@dickoa.如果你有多个下划线的列名,你可以使用这个正则表达式:`sep ="_(?= [^ _]*$)"`.它将仅匹配最后一个下划线以分割列. (6认同)
  • 很酷,有点短(默认值)`gather%>%separate(key,c("key","stat"),sep ="_")%>%spread(key,value)` (2认同)

uhl*_*itz 7

据我所知,没有这样的论点.无论如何,这是一个输出整洁数据的解决方法,我认为这比使用尽可能多的行作为函数和列总结列更好.(注意add_rownames需要dplyr 0.4.0)

library("dplyr")
library("tidyr")

iris %>% 
  summarise_each(funs(min, max, mean, median), matches("Petal")) %>%
  t %>% 
  as.data.frame %>% 
  add_rownames %>%
  separate(rowname, into = c("feature", "fun"), sep = "_")
Run Code Online (Sandbox Code Playgroud)

收益:

       feature    fun       V1
1 Petal.Length    min 1.000000
2  Petal.Width    min 0.100000
3 Petal.Length    max 6.900000
4  Petal.Width    max 2.500000
5 Petal.Length   mean 3.758000
6  Petal.Width   mean 1.199333
7 Petal.Length median 4.350000
8  Petal.Width median 1.300000
Run Code Online (Sandbox Code Playgroud)