r - 如何根据另一个数据表中的条件从数据表中删除行

标签 r data.table

我有 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/

相关文章:

r - 使用具有常量列的向量选择 R data.table 中的列子集

R - 将具有 NULL 类型的列表转换为数据帧

r - 为多个图中的每个图单独的背景颜色

r - 制作 R 包 : NAMESPACE

regex - 如何将列添加到基于另一列中的字符串的 R 中的 data.table?

替换 R data.table 中的 Inf/显示列中的 Inf 数

r - 编辑 xlsx 的作者

矢量查找的 R 习语

沿行复制列的值

r - 如何使用R包stringr或stringi将字符串与数据表中的NA连接起来