R如何通过主键查找最大值并删除重复项

时间:2015-06-18 22:09:17

标签: r

我有一个如下所示的数据集,并希望通过删除行来减少它。如果我对前三列的相同精确组合有超过1个ATTACH值,我想只保留具有最大ATTACH值的行

BOM = c(rep("BOM1", 1), rep("BOM2", 2), rep("BOM3", 3))
PART = c(rep("A", 3), rep("D", 3))
WW = c(rep("WW01",3),rep("WW05",1),rep("WW06",2))
ATTACH = c(1,4,8,2,2,4)


df1 = data.frame(BOM,PART,WW,ATTACH )

最终输出的行号为1,3,4,6,其余行将被删除

2 个答案:

答案 0 :(得分:1)

您可以使用dplyr轻松完成此操作:

library(dplyr)
df1 %>% group_by(BOM, PART, WW) %>% summarise(ATTACH = max(ATTACH))
Source: local data frame [4 x 4]
Groups: BOM, PART

   BOM PART   WW ATTACH
1 BOM1    A WW01      1
2 BOM2    A WW01      8
3 BOM3    D WW05      2
4 BOM3    D WW06      4

答案 1 :(得分:0)

您首先要通过前三行的组合拆分数据框,然后查看每个拆分中ATTACH列的最大值。这是一个解决方案(不确定行的顺序是否重要或必须保留在这里)。

do.call(rbind.data.frame, lapply(
    split(df1, apply(df1[,1:3], 1, paste, collapse=" ")),
    function(x) if(nrow(x) == 1){x}
                else{x[which.max(x[,4]),]}))