从R中的data.frame中删除每个间隔的重复行

时间:2012-06-20 09:29:26

标签: r dataframe

我需要帮助删除data.frame的相同间隔值中的所有重复行。

例如,我有一个data.frame,如:

Time                X   Y   Z
01/01/2011 00:00    101 200 302
01/01/2011 00:05    101 200 302
01/01/2011 00:10    101 200 302
01/01/2011 00:20    100 200 303
01/01/2011 00:25    100 200 303
01/01/2011 00:30    100 200 303
01/01/2011 00:35    101 200 302
01/01/2011 00:40    100 200 303
01/01/2011 00:45    100 200 303

删除重复的行值(x,y,z)后,我将得到如下结果:

Time                X   Y   Z
01/01/2011 00:00    101 200 302
01/01/2011 00:20    100 200 303
01/01/2011 00:35    101 200 302
01/01/2011 00:40    100 200 303

我尝试过:独特或重复的功能,但它们会产生不同的结果。

前/ eliminate <- data[!duplicated(data[,c("X","Y","Z")]),]

此代码只删除所有data.frame中的所有重复值。

有人可以帮我找到解决方案吗?

先谢谢,问候,

Yougyz

2 个答案:

答案 0 :(得分:2)

可能不是最优雅的方式:

data  <- within(data, C <- paste(X, Y, Z, sep = ""))
rl <- rle(data$C)$lengths
data <- data[c(1, cumsum(rl)[-length(rl)] + 1), 1:(ncol(data)-1)]

答案 1 :(得分:2)

以下代码使您感兴趣的三列成为单个向量。然后,我只测试向量之间的相等性,它的偏移量为1.当这是假的时,你已经转换到一个新的XYZ项目。

n <- nrow(ss)
xyz <- with(ss, paste0(X, Y, Z))
sel <- xyz[1:(n-1)] !=  xyz[2:n]
ss[c(TRUE,sel),] #the first one would always be true

这比朱利叶斯回答快约3倍。随着数据集的增长,优势应该会越来越大。