基于co列去重并保留factor值更大行的R语言数据处理需求
按co去重并保留factor最大值的行
样本数据集
df <- data.frame (co = c(11.5,1.3,7.8,2.3,2.3,3.1,5.7,5.7,9.3), factor = c(NA,NA,NA,3,NA,5,NA,6,0.3), condition = c (NA,NA,NA,12.3,NA,13.5,NA,18.7,NA))
当前尝试及问题
使用distinct()按co去重的代码:
df.2 <- distinct(df, co, .keep_all = TRUE)
得到的结果中,co=5.7的行保留了factor为NA的记录,不符合需求:
co factor condition 1 11.5 NA NA 2 1.3 NA NA 3 7.8 NA NA 4 2.3 3.0 12.3 5 3.1 5.0 13.5 6 5.7 NA NA 7 9.3 0.3 NA
期望结果
需要对每个重复的co值,保留factor值最大的行,目标输出:
co factor condition 1 11.5 NA NA 2 1.3 NA NA 3 7.8 NA NA 4 2.3 3.0 12.3 5 3.1 5.0 13.5 6 5.7 6.0 18.7 7 9.3 0.3 NA
解决方案
使用dplyr的分组排序+取首行的方式实现:
library(dplyr) df.2 <- df %>% group_by(co) %>% # 按co分组 arrange(desc(factor), .by_group = TRUE) %>% # 组内按factor降序排列,最大值排第一 slice(1) %>% # 提取每组第一行 ungroup() # 取消分组
这样处理后,每个co对应的行都会保留factor值最大的那条记录,完美匹配期望结果。
内容的提问来源于stack exchange,提问作者GrBa
相关产品推荐
相关产品推荐

