问题:如何清除块中“重复项”中的数据。 我用[blocks]一词来说明两个值(在同一列中)相等,并且位于下面的上方。
在[c1]列中,我具有[2]和[3]值。
值[2]绝对不能包含值[2]。
值[3]绝不能包含值[3]。
我不能使用标准的重复删除功能,因为该列中将有重复项。无法删除手动行,因为它们将成千上万。
如果可能的话,最好不加载任何R包即可解决。
我的R文件:
##########
# Test xts
##########
dates <- as.POSIXct(c
(
"2013-07-24 09:01:00",
"2013-07-24 09:02:00",
"2013-07-24 09:03:00",
"2013-07-24 09:04:00",
"2013-07-24 09:05:00",
"2013-07-24 09:06:00",
"2013-07-24 09:07:00"
)
)
c1 <- c(2,3,2,2,3,3,2) # Data in c1.
# c2 <- c(0,3,2,2,3,0,2) # Data in c2.
data <- data.frame(c1) # Create a dataframe.
xts9 <- xts(x=data, order.by=dates) # Create xts based on dataframe.
运行R文件的结果:
c1
2013-07-24 09:01:00 2
2013-07-24 09:02:00 3
2013-07-24 09:03:00 2
2013-07-24 09:04:00 2
2013-07-24 09:05:00 3
2013-07-24 09:06:00 3
2013-07-24 09:07:00 2
关于哪些行应删除的评论:
c1
2013-07-24 09:01:00 2
2013-07-24 09:02:00 3
2013-07-24 09:03:00 2
2013-07-24 09:04:00 2 # To be remove due to having a 2 above.
2013-07-24 09:05:00 3
2013-07-24 09:06:00 3 # To be remove due to having a 2 above.
2013-07-24 09:07:00 2
答案 0 :(得分:1)
我们可以使用rleid
中的data.table
函数,然后使用duplicated
删除重复的行。
library(data.table)
xts9[!duplicated(rleid(xts9)), ]
# c1
#2013-07-24 09:01:00 2
#2013-07-24 09:02:00 3
#2013-07-24 09:03:00 2
#2013-07-24 09:05:00 3
#2013-07-24 09:07:00 2
如果您想在基数R中执行此操作,我们可以使用rle
而不是使用相同的逻辑
x <- rle(rowSums(xts9))
xts9[!duplicated(rep(seq_along(x$values), x$lengths)), ]
# c1
#2013-07-24 09:01:00 2
#2013-07-24 09:02:00 3
#2013-07-24 09:03:00 2
#2013-07-24 09:05:00 3
#2013-07-24 09:07:00 2