gpt4 book ai didi

r - 在另一个表的同一行的多列上过滤 df?

转载 作者:行者123 更新时间:2023-12-02 02:43:54 24 4
gpt4 key购买 nike

我有一个包含事件开始和结束时间的数据集(称为 df_time),以及另一个包含事件发生时间的数据集(df_val)。我想使用 df_time 将 df_val 仅过滤到记录的时间间隔内发生的事件。

虽然我对如何完成这个有点迷茫。

start = c(1, 5, 7, 4)
end = c(2, 7, 11, 7)
df_time = data.frame(start, end)

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

df_val %>% select_all() %>%
filter(time >= df_time$start & time <= df_time$end)

输出:

  time val
1 6 20
Warning messages:
1: In time >= df_time$start :
longer object length is not a multiple of shorter object length
2: In time <= df_time$end :
longer object length is not a multiple of shorter object length

上面将运行警告消息(上面),并给我错误的输出(忽略等于值时间戳的开始/结束)。以上,应打印除 3 以外的所有值。

我不确定如何解决这个问题,非常感谢任何帮助/资源!

最佳答案

这是您要实现的目标吗?

library(tidyverse)
start = c(1, 5, 7, 4)
end = c(2, 7, 11, 7)
df_time = data.frame(start, end)

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

# return one row for each start/end pair that time falls between
map2_dfr(start, end, ~filter(df_val, time >= .x, time <= .y) %>% mutate(start = .x, end = .y))
#> time val start end
#> 1 2 30 1 2
#> 2 6 20 5 7
#> 3 10 40 7 11
#> 4 11 50 7 11
#> 5 6 20 4 7

#return unique pairs
map2_dfr(start, end, ~filter(df_val, time >= .x, time <= .y)) %>% unique()
#> time val
#> 1 2 30
#> 2 6 20
#> 3 10 40
#> 4 11 50

#simpler method, probably
df_val %>% filter(map_lgl(time, ~any((.x >= start) & .x <= end)))
#> time val
#> 1 6 20
#> 2 2 30
#> 3 10 40
#> 4 11 50

reprex package 创建于 2019-07-25 (v0.2.1)

编辑:添加了一些替代品

关于r - 在另一个表的同一行的多列上过滤 df?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208657/

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