R语言按id折叠数据框并将多值变量存储为列表的实现方法
你之前的代码运行后没有折叠行,是因为summarise默认会将返回的多元素向量按元素数量展开行,只要给多值变量的返回结果套一层list()即可。
最简修改方案(基于你原有代码调整)
library(dplyr) df %>% group_by(fruit) %>% summarise( ranking = first(ranking), # 每个id对应唯一值,用first比mean执行效率更高 taste = first(taste), origin = list(unique(origin)), # 套入list避免结果展开为多行 color = list(unique(color)) )
运行上述代码即可得到你需要的结果,color和origin列都会是列表格式,每个fruit仅占一行,和你给出的预期输出完全一致。
多变量批量处理方案
如果需要处理的变量数量较多,你可以用across批量指定规则,避免逐个写变量名:
df %>% group_by(fruit) %>% summarise( # 单值变量批量取每个分组的第一个值 across(c(ranking, taste), first), # 多值变量批量转换为去重后的列表列 across(c(color, origin), ~ list(unique(.x))) )
如果不需要对多值变量去重,直接保留该id下的所有原始值,去掉代码中的unique()即可。
内容的提问来源于stack exchange,提问作者hikren
相关产品推荐
相关产品推荐

