我想从列x1和x2中删除重复项,同时保持x3中的较高值。
DF:
x1 x2 x3
1 1 1
1 1 2
1 1 3
2 2 2
2 2 5
预期结果:
x1 x2 x3
1 1 3
2 2 5
我已经达到df [!duplicated(df [,c(1,2)]),]但它显示的是x3的最低值。我想获得最高的x3值。
提前谢谢。
答案 0 :(得分:6)
你可以aggregate()
,使用前两列进行分组
aggregate(x3 ~ x1 + x2, df, max)
# x1 x2 x3
# 1 1 1 3
# 2 2 2 5
如果要在多个列中找到最大值,可以使用cbind()
将变量添加到公式的左侧。例如,
aggregate(cbind(x3, x4, x5) ~ x1 + x2, df, max)
答案 1 :(得分:4)
使用dplyr
包:
library(dplyr)
df %>% group_by(x1,x2) %>% summarise(x3 = max(x3))
为清晰起见,您可以标题最大变量“maxOfx3”或类似名称。
修改:如果您有其他需要的最大变量,可以将它们包含在summarise()
调用中:
df %>% group_by(x1,x2) %>% summarise(x3 = max(x3), x4 = max(x4), avg_of_x5 = mean(x5))
等。
答案 2 :(得分:4)
data.table
的另一种选择:
library(data.table)
dt <- data.table(DF)
dt[,.SD[which.max(x3)],by=list(x1, x2)]
x1 x2 x3
1: 1 1 3
2: 2 2 5