我需要根据列[code]中的某些条件删除xts行。删除xts时间序列中的时间间隔就可以了。
问题:我该如何解决step1 / step3 / step4。
标准如下:
步骤1:[代码]中的值[3]:如果xts以[代码] [3]开头,则删除该行。
步骤2:[代码]中的值[0]:。删除整行。
第3步:[code]中的值[2]: a)仅保留启动xts的[2],应删除第一个[2]上方的所有行。 b)保持[2]上方有[3]。
步骤4:[代码]中的值[3]:仅保留上方有[2]的[3]。
第二步的解决方案:
查找并保留所有[2]和[3],从而删除所有[0]:
xts3 <- xts3[grep("[2]|[3]", xts3$code), ]
我的R文件:
dates <- as.POSIXct( # Construct the dates to be used.
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",
"2013-07-24 09:08:00",
"2013-07-24 09:09:00"
)
)
code <- c(3, 2, 0, 2, 2, 2, 3, 3, 3) # Criterias for delete/keep rows.
data <- data.frame(code) # Create a dataframe.
xts3 <- xts(x=data, order.by=dates) # Create xts based on dataframe.
R文件的结果(在根据条件删除行之前):
code
2013-07-24 09:01:00 3
2013-07-24 09:02:00 2
2013-07-24 09:03:00 0
2013-07-24 09:04:00 2
2013-07-24 09:05:00 2
2013-07-24 09:06:00 2
2013-07-24 09:07:00 3
2013-07-24 09:08:00 3
2013-07-24 09:09:00 3
说明:什么触发行删除(基于条件):
code
2013-07-24 09:01:00 3 # To be removed due to step-1.
2013-07-24 09:02:00 2 # To be kept due to step-3a.
2013-07-24 09:03:00 0 # To be removed due to step-2
2013-07-24 09:04:00 2 # To be removed due to not fulfilling step-3b
2013-07-24 09:05:00 2 # To be removed due to not fulfilling step-3b
2013-07-24 09:06:00 2 # To be removed due to not fulfilling step-3b
2013-07-24 09:07:00 3 # The kept due to step-4
2013-07-24 09:08:00 3 # To be removed due to not fulfilling step4.
2013-07-24 09:09:00 3 # To be removed due to not fulfilling step4.
删除行后的预期结果:
code
2013-07-24 09:02:00 2
2013-07-24 09:07:00 3
答案 0 :(得分:1)
如果只有0、2和3作为值,则可以使用diff
一次性获得大多数规则。只需要那些差异为1(大于3的2)或-1(大于2的3)的记录。因此diff
的绝对值将是我们需要的。并且我们需要第一行的值为2。将这些行组合起来即可得到结果xts3_filtered。
xts3_filtered <-c(xts3 [first(which(xts3 $ code == 2))],xts3 [abs(diff(xts3 $ code))== 1])
code
2013-07-24 09:02:00 2
2013-07-24 09:02:00 2
2013-07-24 09:07:00 3
现在我们有了重复的行,因为这两个规则都选择前两个出现的记录。因此,我们使用以下代码删除所有重复项
xts3_filtered[!duplicated(index(xts3_filtered))]
code
2013-07-24 09:02:00 2
2013-07-24 09:07:00 3