【发布时间】:2018-11-22 08:39:19
【问题描述】:
我需要根据列 [code] 中的某些条件删除 xts 行。删除xts时间序列中会有时间间隔很好。
问题:如何解决step1/step3/step4。
标准如下:
步骤 1:[code] 中的值 [3]: 如果 xts 以 [code] [3] 开头,则删除该行。
第 2 步:[code] 中的值 [0]: 删除整个行。
第 3 步:[code] 中的值 [2]: a) 仅保留启动 xts 的 [2],应删除第一个 [2] 上方的所有行。 b) 保留上面有 [3] 的 [2]。
第 4 步:[代码] 中的值 [3]: 仅保留其上方有 [2] 的 [3]。
我对第 2 步的解决方案:
查找并保留所有 [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
【问题讨论】:
-
有趣的作业(猜),解决方案 2a 你可以做
xts3[which(xts3$code == 2)[1]:nrow(xts3), ]。 -
@jay.sf 其实不是功课。我正在构建一个需要清理 xts 的系统。
-
根据您的示例,请添加预期输出。你需要使用 xts 还是可以使用 dplyr / data.table 或其他东西?还需要先执行规则 4 还是在执行规则 1-3 之后执行?
-
@phiver:我用预期的结果更新了这个问题。我更喜欢使用 xts,但另一种方法是将 xts 移动到数据帧,从而失去 xts 的时间戳功能。我想将加载的 R 包的数量保持在最低限度。我重新排列了这些步骤,以便它们按顺序更有意义。
-
@jay.sf 我被要求澄清步骤的顺序,所以你的答案是解决步骤 3a。