您所说的问题似乎是从 a 中删除重复的行data.frame
,这不需要任何聚合。根据您的示例,这就是您所追求的:
unique(test.df[c(1,3,4)])
# id x1 x2
#1 A 1 A
#4 B 2 B
编辑:
我不太明白你的意思是什么:
“我试过了,FUN=unique
但似乎没有用。”
只是为了解释你可能犯了什么错aggregate
误,在这里,我展示了如何得到同样的结果aggregate
:
test.df$x2 <- as.character(test.df$x2)
aggregate(. ~ id, FUN=unique , data = test.df[c(1,3,4)] )
# id x1 x2
#1 A 1 A
#2 B 2 B
但是,这里没有必要使用aggregate()
。这个问题的效率非常低。您可以检查一下,system.time(.)
即使在此数据上也有所不同:
system.time(unique(test.df[c(1,3,4)]))
# user system elapsed
# 0.001 0.000 0.001
system.time(aggregate(. ~ id, FUN=unique , data = test.df[c(1,3,4)] ))
# user system elapsed
# 0.004 0.000 0.004
继续在你的百万行上运行它并检查你的结果identical
并查看运行时间。
从您的评论中,我认为您对unique
. 正如@mnel 解释的那样,它 (unique.data.frame)
从给定的 中单独删除所有重复的行data.frame
。它适用于您的情况,因为您这么说x1
并且x2
每个 都具有相同的值ID
。因此,您不必知道其中的data.frame
ID
位置。您只需要为每个 ID 选择 1 行。