在R中如何列出与ID变量关联的key变量的全部对应取值?
你之前使用group_by()同时传入id和key没有得到预期结果,是因为双变量分组会把每个id+key的唯一组合作为一个分组,每个分组仅对应1行数据,无法实现按ID聚合的效果,仅需按id单个字段分组即可。
R实现ID对应不同key统计及指定格式表格输出
1. 统计每个ID对应的不同key数量
直接使用dplyr的分组聚合即可实现,60万行数据使用该方法计算无性能压力,代码如下:
library(dplyr) # 统计不同key数量 key_count <- data %>% group_by(id) %>% summarise(distinct_key_num = n_distinct(key), .groups = "drop")
输出的key_count数据框中每一行对应一个ID,distinct_key_num列即为该ID关联的不同key的总数。
2. 生成ID合并展示的表格
要实现同ID仅第一行显示ID值、其余行对应ID位置留空的格式,可按如下方式处理:
# 先对数据按ID去重排序,再处理ID列的显示 display_table <- data %>% distinct(id, key) %>% # 先去除同ID同key的重复行 arrange(id) %>% # 按ID排序保证同ID的行连续 group_by(id) %>% mutate(id = ifelse(row_number() == 1, id, "")) %>% # 同ID仅第一行保留ID值 ungroup()
此时输出display_table即可得到你需要的展示效果,示例数据运行后输出如下:
# A tibble: 7 × 2 id key <chr> <chr> 1 58497484 5718368_09/06/1981_3_2014 2 "" 2077450_04/05/2001_1_2016 3 "" 2077477_03/03/1978_8_2017 4 58544005 2077485_02/06/1977_8_2014 5 62824455 2082225_02/07/1998_10_2017 6 74764718 2077388_30/01/2000_11_2017 7 74766653 2091585_23/10/1982_1_2014
如果需要导出为带合并单元格格式的Excel文件,可额外使用openxlsx包实现ID列的单元格合并效果。
内容的提问来源于stack exchange,提问作者Letícia Santana
相关产品推荐
相关产品推荐

