如何在R语言中合并DataFrame分组内的分类行值为单个值
我来帮你搞定这个问题!你想要把同一name对应的多个labels合并到同一行,其实不用绕到group_map——tidyverse里有更直接的方案,用group_by()搭配summarize()就能轻松实现。
首先先确认你的初始数据没问题:
library(tidyverse) test_df <- data.frame( name = c('A', 'A', 'B', 'C', 'C'), labels = c('historical', 'comedy', 'tragedy', 'comedy', 'young adult') )
接下来是核心的合并代码:
test_combined <- test_df %>% group_by(name) %>% summarize( # 给每个标签加上双引号,再用逗号+空格合并 labels = str_c('"', labels, '"', collapse = ', '), # 可选:取消分组状态,让结果回到普通tibble .groups = 'drop' )
运行后你就能得到想要的结果:
# A tibble: 3 × 2 name labels <chr> <chr> 1 A "historical", "comedy" 2 B "tragedy" 3 C "comedy", "young adult"
为什么你之前的group_map方法没生效?
group_map的作用是对每个分组单独应用函数,然后把所有分组的结果拼接起来。你之前的函数只是返回了原分组的labels列,相当于没做合并操作,所以最后还是会保留原有的多行结构。如果一定要用group_map实现,也可以,但需要让每个分组返回单行数据,比如:
test_df %>% group_by(name) %>% group_map(~ tibble( name = .x$name[1], labels = str_c('"', .x$labels, '"', collapse = ', ') )) %>% bind_rows()
不过显然第一种用summarize的方法更简洁直观,推荐优先使用~
内容的提问来源于stack exchange,提问作者dshgna
相关产品推荐
相关产品推荐

