将 2 个数据框与 df.x 中的 dateTime 列在 df.y 中的 dateStart dateEnd 上过滤?

核心马克西姆斯

我有一个包含事件开始和结束时间的数据集(称为 df_time),以及另一个事件发生时间的数据集(df_val)。我想对两个数据帧进行内部连接,以确定 df_val 是否发生在 df_time 的 2 列内。

start = c(1, 5, 7, 4)
end = c(2, 7, 11, 7)
event_id = c('a', 'b', 'c', 'd')
df_time = data.frame(start, end, event_id)

time = c(3, 6, 2, 10, 11)
val = c(100, 20, 30, 40, 50)
df_val = data.frame(time, val)

我知道 map2_dfr,并且正在使用它:

library(tidyverse)

unique(  map2_dfr(  df_time$start, df_time$end,
                    ~filter(df_val, time >= .x, time <= .y)  )  )

但是,这仅返回 df_val 中的列;有什么方法可以从 df_time 取回列以获取如下输出:

  time val  start end event_id
1    2  30  1     2   'a'
2    6  20  5     7   'b'
3   10  40  7     11  'c'
4   6   50  4     7   'd'

编辑:setDT 非常接近正确答案!但是,df_time 的 val 值和 time 的 df_val 中没有相应值的行的值,而不是完全省略。例如,考虑以下情况 2:

Case 2

time=c(3,6,10,11)
val=c(100,20,40,50)
df_val=data.frame(time,val)

start = c(1, 5, 7, 4)
end = c(2, 7, 11, 7)
event_id = c('a', 'b', 'c', 'd')
df_time = data.frame(start, end, event_id)

setDT(df_time)[df_val, c("val", "time")  := .(val, time) , 
         on = .(start <= time,  end >= time)]

df_time

输出:

df_time
start   end   event_id   val   time
1       2     a          NA    NA
5       7     b          20    6
7       11    c          50    11
4       7     d          20    6

预期/正确输出:

start   end   event_id   val   time
5       7     b          20    6
7       11    c          50    11
4       7     d          20    6
阿克伦

一个选项是非对等加入data.table将 'data.frame' 转换为 'data.table' ( setDT(df_time)),加入 'df_val'on非等值 ( <=, >=) 列,并分配 ( :=) 与 ' 中的新列匹配的相应 'val' 和 'time' df_time'

library(data.table)
na.omit(setDT(df_time)[df_val, c("val", "time")  := .(val, time) , 
         on = .(start <= time,  end >= time)])
#.  start end event_id val time
#1:     5   7        b  20    6
#2:     7  11        c  50   11
#3:     4   7        d  20    6

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从熊猫df中的x列中提取值,其中df中的y列== list(i)

仅当df2中的列中的值位于df1中时,才将2个数据帧附加在一起

将df1列中值的两个数据帧合并为df2和df1列中逗号分隔的值.Column2 = df2.Column2

在pandas df列中过滤

将df1列中值的两个数据帧合并为df2列中逗号分隔的值

将df1列1与df2中的所有列进行比较,返回df2的索引

如何根据 df2 中两列的日期范围值之间的 df1 中的日期在单独的数据框 (df2) 中查找数据

根据Spark DF中2列的组合过滤行

如果找到匹配项,则比较两个不同数据框中的列,将电子邮件从df2复制到df1

在不同列中的多个条件上过滤数据框

如何合并两个数据帧的x和y行,但列应并排(df2 $ y)并排(df1 $ x)?

检查df2中的datetime列的值是否在R中的df1的datateime值之内

如何使用pandas DF过滤列中的数据

如何使用不同的列将选定的列附加到df的pandas数据框中

在DF列中过滤特定日期

如何将一些 datetime.datetime 值转换为 pandas df 列中的 datetime.time 值

如果列的valueS存在于其他数据框df2中,则从数据框df1中删除行

如何通过检查2列中的值来将1 df的列映射为另一个df

对于 df 中的每 2 列,将第 1 列与第 2 列分开

比较两个数据帧中的列并删除df2中值在df1中+/- 0.03以内的行

在 pandas df 中过滤下面看到的数据

熊猫将数据合并到df中

使用2个数据帧的IP列和日期范围,用df2中的数据填充df1数据帧

如何遍历数据框df中的选定列?

我有一个很长的数据帧列表,并希望使用 for 循环将每个数据帧转换为 numpy 数组 X1、X2、X3 给定的 Pandas 数据帧 df1、df2、df3 在 python 中

Pandas DF - 按 A 列中的值过滤 DF,B 列中的最大值(分组依据?)

在df2.col2的基础上,在df.col1中填充na。两个数据框的大小不同

通过调用df2中列出的df1索引来创建数据框

从 df 列中的列表中过滤预期值