我有 2 个数据框:
master = data.table(MasterTimes= as.POSIXct("2015-01-01", tz = "GMT") + seq(1,100,1))
mydata = data.frame(MyTimes = as.POSIXct(c("2015-01-01 00:00:18","2015-01-01 00:00:54","2015-01-01 00:00:48","2015-01-01 00:01:10","2015-01-01 00:01:05"),tz = "GMT"))
我想在 的 +/- 5 秒窗口内保留 master 中的任何行任何 时间在 mydata
数据框。我想删除 master
中的行不符合那个条件的。这是一个更简单的例子,如果
mydata
只有 1 行:master = data.table(MasterTimes= as.POSIXct("2015-01-01", tz = "GMT") + seq(1,100,1))
mydata = data.frame(MyTimes = as.POSIXct(c("2015-01-01 00:00:18"),tz = "GMT"))
你可以看到mydata
仅包含 "2015-01-01 00:00:18"
.在这种情况下,我想从主数据框中删除时间不在 +- 5 秒窗口内的所有行,即我想从 master
中删除所有行之前 "2015-01-01 00:00:13"
之后 "2015-01-01 00:00:23"
这是最简单的情况,但更难的情况是如果 mydata 包含 mydata = data.frame(MyTimes = as.POSIXct(c("2015-01-01 00:00:18", "2015-01-01 00:00:22"),tz = "GMT"))
在这种情况下,因为 "2015-01-01 00:00:18"
是否再次出现我通常会在 "2015-01-01 00:00:13"
之前删除 master 中的所有行之后 "2015-01-01 00:00:23"
.但在这种情况下,我不能这样做,因为
mydata
还包含 "2015-01-01 00:00:22"
所以我想保留所有行 master
之后 "2015-01-01 00:00:18"
及之前 "2015-01-01 00:00:27"
因为 "2015-01-01 00:00:22"
在我的数据中,我现在需要将来自 "2015-01-01 00:00:23"
的行保留在 master 中至 "2015-01-01 00:00:27"
基本上,我想保留 master 中每一行的 +/- 5 秒窗口内的任何行 mydata
.如果 master 中有任何行是 不是 在 5 秒内我想删除它。更新
如果
master
,您能建议如何实现吗?和 mydata
有超过 1 列,如:master = data.table(MasterTimes= as.POSIXct("2015-01-01", tz = "GMT") + seq(1,100,1), otherol = seq(1,100,1))
mydata = data.frame(MyTimes = as.POSIXct(c("2015-01-01 00:00:18"),tz = "GMT"),othercol = c(1))
实际上,master 和 mydata 都有 50 多列。
最佳答案
基础 R 解决方案:
check_valid_time <- function(row, mydata){
any(row > mydata$MyTimes - 5 & row < mydata$MyTimes + 5)
}
master[sapply(master$MasterTimes, check_valid_time, mydata),]
关于r - 如何根据另一个数据表中的条件从数据表中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36184659/