如何在保留R中的原始行名称的同时提取重复的最高值?

时间:2016-05-10 06:33:46

标签: r dataframe duplicates aggregate

我有一个data.frame(9行和2个cols)。 它包含重复,重复三次的值和唯一值。 我想在重复行和三重行中从列2中提取具有最高值的唯一行,并从头开始提取唯一值。

以下是我的例子:

df



    V1 V2
 1 "A"  "1" 
 2 "B"  "2" 
 3 "C"  "1" 
 4 "D"  "4" 
 5 "C"  "5" 
 6 "B"  "6" 
 7 "E"  "7" 
 8 "B"  "8" 
 9 "A"  "9" 

最终我想要的是“A”,“B”,“C”具有最高价值,“D”,“E”在那里,因为它们从一开始就是独一无二的:

  V1    V2
4 "D"  "4" 
5 "C"  "5" 
7 "E"  "7" 
8 "B"  "8" 
9 "A"  "9" 

我可以用聚合来做,但问题是我在最后丢失了行名称,它将是这样的:

aggregate(df$V2~df$V1,df,function(x) x[which.max(x)])

   V1 V2
1 "D"  "4" 
2 "C"  "5" 
3 "E"  "7" 
4 "B"  "8" 
5 "A"  "9" 

虽然我需要保持原始行名称最终如下:

    V1  V2
4 "D"  "4" 
5 "C"  "5" 
7 "E"  "7" 
8 "B"  "8" 
9 "A"  "9" 

你可以帮我解决一下我的问题吗?

提前致谢,

1 个答案:

答案 0 :(得分:2)

我们可以使用df[with(df, ave(V2, V1, FUN= max)==V2),] # V1 V2 #4 D 4 #5 C 5 #7 E 7 #8 B 8 #9 A 9

df <- structure(list(V1 = c("A", "B", "C", "D", "C", "B", "E", "B", 
"A"), V2 = c(1L, 2L, 1L, 4L, 5L, 6L, 7L, 8L, 9L)), .Names = c("V1", 
"V2"), class = "data.frame", row.names = c(NA, -9L))

数据

{{1}}