使用dplyr group_split保留数据框名称

For*_*rge 2 r dplyr

使用来自dplyr的group_split,但我需要列表中的每个数据框都保留名称。

dplyr文档中的示例(注意,数据帧已编号。最佳输出是每个数据帧均具有分组变量的名称(Setosa,versicolor ...):

    ir <- iris %>%
  group_by(Species)

group_split(ir)
#> [[1]]
#> # A tibble: 50 x 5
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#>           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
#>  1          5.1         3.5          1.4         0.2 setosa 
#>  2          4.9         3            1.4         0.2 setosa 
#>  3          4.7         3.2          1.3         0.2 setosa 
#>  4          4.6         3.1          1.5         0.2 setosa 
#>  5          5           3.6          1.4         0.2 setosa 
#>  6          5.4         3.9          1.7         0.4 setosa 
#>  7          4.6         3.4          1.4         0.3 setosa 
#>  8          5           3.4          1.5         0.2 setosa 
#>  9          4.4         2.9          1.4         0.2 setosa 
#> 10          4.9         3.1          1.5         0.1 setosa 
#> # … with 40 more rows
#> 
#> [[2]]
#> # A tibble: 50 x 5
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
#>           <dbl>       <dbl>        <dbl>       <dbl> <fct>     
#>  1          7           3.2          4.7         1.4 versicolor
#>  2          6.4         3.2          4.5         1.5 versicolor
#>  3          6.9         3.1          4.9         1.5 versicolor
#>  4          5.5         2.3          4           1.3 versicolor
#>  5          6.5         2.8          4.6         1.5 versicolor
#>  6          5.7         2.8          4.5         1.3 versicolor
#>  7          6.3         3.3          4.7         1.6 versicolor
#>  8          4.9         2.4          3.3         1   versicolor
#>  9          6.6         2.9          4.6         1.3 versicolor
#> 10          5.2         2.7          3.9         1.4 versicolor
#> # … with 40 more rows
#> 
#> [[3]]
#> # A tibble: 50 x 5
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species  
#>           <dbl>       <dbl>        <dbl>       <dbl> <fct>    
#>  1          6.3         3.3          6           2.5 virginica
#>  2          5.8         2.7          5.1         1.9 virginica
#>  3          7.1         3            5.9         2.1 virginica
#>  4          6.3         2.9          5.6         1.8 virginica
#>  5          6.5         3            5.8         2.2 virginica
#>  6          7.6         3            6.6         2.1 virginica
#>  7          4.9         2.5          4.5         1.7 virginica
#>  8          7.3         2.9          6.3         1.8 virginica
#>  9          6.7         2.5          5.8         1.8 virginica
#> 10          7.2         3.6          6.1         2.5 virginica
#> # … with 40 more rows
#> 
#> attr(,"ptype")
#> # A tibble: 0 x 5
#> # … with 5 variables: Sepal.Length <dbl>, Sepal.Width <dbl>,
#> #   Petal.Length <dbl>, Petal.Width <dbl>, Species <fct>
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 5

group_split不保留名称。从?group_split

它不会根据分组来命名列表的元素,因为这通常会丢失信息并且令人困惑。

您可以使用基地base::split

split(iris, iris$Species)
Run Code Online (Sandbox Code Playgroud)

或使用分别命名小标题列表setNames

library(dplyr)
group_split(ir) %>% setNames(unique(iris$Species))
Run Code Online (Sandbox Code Playgroud)

group_split根据数据的因子级别进行拆分,因此,如果我们想根据它们在数据中的出现进行拆分,则可能必须重新排列因子级别。在iris数据集中,因子水平与数据中出现的因子顺序相同,因此可以进行上述工作。

一般而言,我们应该使用。

iris %>%
  mutate(Species= factor(Species, levels = unique(Species))) %>%
  group_split(Species) %>%
  setNames(unique(iris$Species))
Run Code Online (Sandbox Code Playgroud)

  • 您如何确定分配了正确的名称? (2认同)