在R中去除具有重复属性的行

13

我有一个包含多列的大型数据框,例如:

ID, time, OS, IP

该数据框中的每一行都对应一个条目。在该数据框中,对于某些ID,存在多个条目(行)。我想要消除这些多个行(显然,其他属性将会因相同的ID而不同)。或者换句话说:我只想要每个ID的单个条目(行)。

当我在ID列上使用unique时,我只得到了级别(或每个唯一的ID),但我也想保留其他属性。 我尝试使用apply(x,2,unique(data$ID)),但这也不起作用。


1
当观测数据的其他属性不一致时,您需要定义对于具有相同ID的观测数据,您希望如何处理这些属性。 - Aniko
好的,我想看看用户的操作系统分布情况... 因此,当我有了每个用户仅有一个条目的数据框时,我会执行以下操作:mytable <- table(dataset$os.name),然后进行一些绘图... - CatholicEvangelist
2个回答

29
subset(data,!duplicated(data$ID))

应该能解决问题


如果您没有任何启发式方法来选择其他数据,这将起作用。 对我来说,这似乎是一个非常奇怪的用例... - Shane

3

如果您希望每个ID保留一行,但每行的数据不同,则需要决定一些逻辑来丢弃其他行。例如:

df <- data.frame(ID=c(1, 2, 2, 3), time=1:4, OS="Linux")
df
  ID time    OS
1  1    1 Linux
2  2    2 Linux
3  2    3 Linux
4  3    4 Linux

现在我将保留最大时间值和最后的操作系统值:
library(plyr)
unique(ddply(df, .(ID), function(x) data.frame(ID=x[,"ID"], time=max(x$time), OS=tail(x$OS,1))))
  ID time    OS
1  1    1 Linux
2  2    3 Linux
4  3    4 Linux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接