首页 > 解决方案 > 如果列值为x,有没有办法总结?

问题描述

我正在尝试制作一个data.frame显示个人显示行为的平均时间。

我一直在使用group_byandsummarise来计算各组的平均值。但是输出向下很多行。查看使用 iris 数据集的示例...

data(iris)

x <- iris %>% 
     group_by(Species, Petal.Length) %>% 
     summarise(mean(Sepal.Length))

对于这个例子,我想得到一个输出,每个“物种”有一行,每个“Petal.Length”有一列平均值。

我已经求助于创建多个输出,然后使用left_join将它们组合成所需的data.frame. 请参见下面的示例...

a <- iris %>% 
 group_by(Species) %>%
 filter(Petal.Length == 0.1) %>% 
 summarise(mean(Sepal.Length))

b <- iris %>% 
 group_by(Species) %>%
 filter(Petal.Length == 0.2) %>% 
 summarise(mean(Sepal.Length))

left_join(a, b)

但是,一次执行 12 次或更多次是乏味的,我相信必须有一种简单的方法可以mean(Sepal.Length)在一个输出中获得 'Petal.Length' 0.1、0.2 和 0.3(等)。

我的数据中的 nbPetal.Length实际上是代表行为的字符,并且Sepal.Length是持续时间

标签: rdplyr

解决方案


一些想法:

library(tidyverse)
data(iris)

mutate(iris, Petal.Length_discrete = cut(Petal.Length, 5)) %>% 
  group_by(Species, Petal.Length_discrete) %>% 
  summarise(mean(Sepal.Length))
#> `summarise()` has grouped output by 'Species'. You can override using the `.groups` argument.
#> # A tibble: 7 x 3
#> # Groups:   Species [3]
#>   Species    Petal.Length_discrete `mean(Sepal.Length)`
#>   <fct>      <fct>                                <dbl>
#> 1 setosa     (0.994,2.18]                          5.01
#> 2 versicolor (2.18,3.36]                           5   
#> 3 versicolor (3.36,4.54]                           5.81
#> 4 versicolor (4.54,5.72]                           6.43
#> 5 virginica  (3.36,4.54]                           4.9 
#> 6 virginica  (4.54,5.72]                           6.32
#> 7 virginica  (5.72,6.91]                           7.25

iris %>% 
  group_split(Species, Petal.Length) %>% 
  map(~ summarise(.x, mean(Sepal.Length))) %>% 
  head(3)
#> [[1]]
#> # A tibble: 1 x 1
#>   `mean(Sepal.Length)`
#>                  <dbl>
#> 1                  4.6
#> 
#> [[2]]
#> # A tibble: 1 x 1
#>   `mean(Sepal.Length)`
#>                  <dbl>
#> 1                  4.3
#> 
#> [[3]]
#> # A tibble: 1 x 1
#>   `mean(Sepal.Length)`
#>                  <dbl>
#> 1                  5.4

reprex 包于 2021-06-28 创建 (v2.0.0 )


推荐阅读