2015-06-18 87 views
1

我有一个如下的数据集并希望通过删除行来减少它。在情况下,我有超过1前三列的完全相同的组合连网价值,我想只保留具有最大的连网值R如何通过主键找到最大值并删除重复项

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和其余行将被删除

回答

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 
+0

谢谢,已经在使用它,并很好地工作! – GabStacker

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]),]})) 
相关问题