Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R根据数据范围和变量组合填写数据值_R - Fatal编程技术网

R根据数据范围和变量组合填写数据值

R根据数据范围和变量组合填写数据值,r,R,我有两个数据帧已经合并在一起,1。具有精细比例尺GPS位置数据以及日期时间和站点id;二,。每个站点的观察结果,包括站点id、个人id以及在给定站点开始和结束监测的时间。在合并的数据框中,一些单独的id值为NA,因为这两个表在日期时间和站点id上不匹配。但是,我想在站点id匹配且日期时间在与该监视事件相关的开始日期和结束日期之间的位置填写单独的id。所有这些字段在一个表中可用。我目前正在使用一个循环来填充丢失的单个ID,但我有数百万行,效率非常低。有没有提高效率的建议 MWE 用于解决此问题的F

我有两个数据帧已经合并在一起,1。具有精细比例尺GPS位置数据以及日期时间和站点id;二,。每个站点的观察结果,包括站点id、个人id以及在给定站点开始和结束监测的时间。在合并的数据框中,一些单独的id值为NA,因为这两个表在日期时间和站点id上不匹配。但是,我想在站点id匹配且日期时间在与该监视事件相关的开始日期和结束日期之间的位置填写单独的id。所有这些字段在一个表中可用。我目前正在使用一个循环来填充丢失的单个ID,但我有数百万行,效率非常低。有没有提高效率的建议

MWE

用于解决此问题的For循环(效率低下)

for(1中的i:nrow(dat)){
tmp=dat[i,]
如果(!is.na(dat[i,'id']){next}
dat[i,'id']=df2%>%过滤器(site==tmp$site,start=tmp$date\u time)%>%pull(id)
}

多亏了@thelatemail,这个解决方案成功了:

df2[df1, on=c("site","start<=date_time","end>=date_time")]
df2[df1,on=c(“站点”,“开始=日期和时间”)]

您愿意使用data.table吗?如果是这样的话,您可以进行非均衡连接,比如
df2[df1,on=c(“site”,“start=date\u time”)]
@这可能会起作用。谢谢你的建议。我有一些错误弹出-建议一个错误的合并(重复)-所以我正在努力看看是否可以解决。我没有时间写一个完整的答案,但还要考虑:
library(data.table);setDT(df1);setDT(df2);df1[df2,on=c(“站点”,“日期时间>=start”,“日期时间再次感谢!是的,我认为这或使用foverlap可能会解决问题。再次感谢您的想法-它正在帮助我走上正确的道路:)@上次邮件你的第一个解决方案成功了。我试图匹配的id表中有一些重复项,这导致了一个错误,但现在它正在工作。干杯!
for(i in 1:nrow(dat)){
  tmp = dat[i,]
  if(!is.na(dat[i,'id'])){next}
  dat[i,'id'] = df2 %>% filter(site==tmp$site, start<=tmp$date_time, end>=tmp$date_time) %>% pull(id)
}
df2[df1, on=c("site","start<=date_time","end>=date_time")]