我有一个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"
你可以帮我解决一下我的问题吗?
提前致谢,
答案 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}}