我想将数据框转换为列表列表,如下例所示:
df <- data.frame(var1=c("A","A","A","B","B","C"),var2=seq(1,6))
> var1 var2
1 A 1
2 A 2
3 A 3
4 B 4
5 B 5
6 C 6
split(df$var2,df$var1)
$A
[1] 1 2 3
$B
[1] 4 5
$C
[1] 6
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否可以使用%>%管道来完成此操作。我不知道如何split在管道中使用,其中df作为输入给出。或者也许还有另一种方法。
有几个选项,其中一些已经在评论中提到:
df <- data.frame(var1=c("A","A","A","B","B","C"),var2=seq(1,6))
# magrittr pipe
df %>%
{split(.$var2, .$var1)}
#> $A
#> [1] 1 2 3
#>
#> $B
#> [1] 4 5
#>
#> $C
#> [1] 6
# base pipe
df |>
(\(x) split(x$var2, x$var1))()
#> $A
#> [1] 1 2 3
#>
#> $B
#> [1] 4 5
#>
#> $C
#> [1] 6
# dplyr
library(dplyr)
library(purrr)
df %>%
group_by(var1) %>%
group_map(~ pull(.x, var2)) %>%
set_names(unique(df$var1))
#> $A
#> [1] 1 2 3
#>
#> $B
#> [1] 4 5
#>
#> $C
#> [1] 6
Run Code Online (Sandbox Code Playgroud)
创建于 2023-03-04,使用reprex v2.0.2
不是一个dplyr解决方案,但使用magrittrs “exposition” 管道%$%你可以这样做:
df <- data.frame(var1=c("A","A","A","B","B","C"),var2=seq(1,6))
library(magrittr)
df %$%
split(var2, var1)
#> $A
#> [1] 1 2 3
#>
#> $B
#> [1] 4 5
#>
#> $C
#> [1] 6
Run Code Online (Sandbox Code Playgroud)