gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:46:30 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com