gpt4 book ai didi

r - 要列出的分组数据框

转载 作者:行者123 更新时间:2023-12-04 11:06:14 25 4
gpt4 key购买 nike

我有一个包含分组名称的数据框,如下所示:

df <- data.frame(group = rep(letters[1:2], each=2),
name = LETTERS[1:4])
> df
group name
1 a A
2 a B
3 b C
4 b D

我想将其转换为以组名称为键并包含名称的列表。示例输出:
df_out <- list(a=c('A', 'B'),
b=c('C', 'D'))

> df_out
$a
[1] "A" "B"

$b
[1] "C" "D"

这是 not a new question但我想完全在 tidyverse 中做到这一点。

最佳答案

据我所知,tidyverse 中还没有这样的功能。因此,您必须自己编写:

split_tibble <- function(tibble, col = 'col') tibble %>% split(., .[, col])

然后:
dflist <- split_tibble(df, 'group')

结果是一个数据框列表:

> dflist
$a
group name
1 a A
2 a B

$b
group name
3 b C
4 b D

> sapply(dflist, class)
a b
"data.frame" "data.frame"


要获得所需的输出,您必须稍微扩展该功能:
split_tibble <- function(tibble, column = 'col') {
tibble %>% split(., .[,column]) %>% lapply(., function(x) x[,setdiff(names(x),column)])
}

现在:
split_tibble(df, 'group')

结果是:

$a
[1] A B
Levels: A B C D

$b
[1] C D
Levels: A B C D


考虑评论和两个答案中的替代方案,得出以下结论:使用基本 R 替代方案 split(df$name, df$group)聪明得多。

关于r - 要列出的分组数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com