R语言dataframe按id分组取各列最大值并保留字符变量的实现
实现方法
1. 依赖工具
使用dplyr包完成分组聚合操作,核心逻辑是按id分组后,对不同类型的变量执行不同的聚合规则。
2. 完整代码
首先读取示例数据集:
library(dplyr) # 构造示例数据 df <- read.table(text = "id time sex Age Comorbidity_Comorbidity 1 1 male 90 1 1 2 male 91 2 1 3 male 92 3 2 1 female 87 1 2 2 female 88 2 2 3 female 89 3 3 1 male 50 1 3 2 male 51 2 3 3 male 52 3 4 1 female 54 1 4 2 female 55 2 4 3 female 56 3", header = TRUE)
执行分组聚合操作:
result <- df %>% group_by(id) %>% summarise( # 所有数值型变量取分组内的最大值 across(where(is.numeric), max), # 所有非数值型变量取分组内的第一个值(同组取值完全一致,取任意值结果相同) across(where(~!is.numeric(.)), first) )
3. 输出结果
执行上述代码后得到的result即为你需要的数据集:
# A tibble: 4 × 5 id time sex Age Comorbidity_Comorbidity <int> <int> <chr> <int> <int> 1 1 3 male 92 3 2 2 3 female 89 3 3 3 3 male 52 3 4 4 3 female 56 3
如果使用的低版本dplyr不支持where语法,可以用以下替代写法:
result <- df %>% group_by(id) %>% summarise_if(is.numeric, max) %>% left_join(distinct(df, id, sex), by = "id")
内容的提问来源于stack exchange,提问作者Economist_Ayahuasca
相关产品推荐
相关产品推荐

