同一Group分组下去除Amplitude列重复值的R实现方案
分组去重DataFrame指定列的实用方案
最推荐的dplyr实现
用dplyr的分组+去重组合,代码简洁易读,直接搞定需求:
library(dplyr) result_df <- df %>% group_by(Group) %>% distinct(Amplitude, .keep_all = FALSE) %>% arrange(Group, Amplitude)
group_by(Group):把数据按Group拆分成各自的分组distinct(Amplitude, .keep_all = FALSE):在每个分组里只保留唯一的Amplitude值,并且只留Group和Amplitude这两列(自动丢掉Origin)arrange是可选操作,仅为了让结果和示例顺序完全匹配,不需要可直接删除
原生R实现(无需额外包)
不想加载第三方包的话,用原生R的拆分+合并逻辑也能实现:
result_base <- do.call(rbind, lapply(split(df, df$Group), function(x) { data.frame(Group = x$Group[1], Amplitude = unique(x$Amplitude)) })) # 排序并重置行名,对齐示例格式 result_base <- result_base[order(result_base$Group, result_base$Amplitude), ] rownames(result_base) <- NULL
大数据量首选:data.table
如果处理的是超大数据集,data.table的执行效率会更有优势:
library(data.table) dt <- as.data.table(df) result_dt <- dt[, .(Amplitude = unique(Amplitude)), by = Group][order(Group, Amplitude)]
以上三种方法最终输出的结果,都和你给出的desired_df完全一致。
内容的提问来源于stack exchange,提问作者JVGen
相关产品推荐
相关产品推荐

