相关疑难解决方法(0)

在另一个数据帧中按范围过滤一个数据帧的有效方法

假设我有一个数据框,其中包含一堆数据和一个日期/时间列,指示何时收集每个数据点.我有另一个列出时间跨度的数据框,其中"开始"列表示每个跨距开始的日期/时间,"结束"列表示每个跨度结束的日期/时间.

我在下面使用简化数据创建了一个虚拟示例:

main_data = data.frame(Day=c(1:30))

spans_to_filter = 
    data.frame(Span_number = c(1:6),
               Start = c(2,7,1,15,12,23),
               End = c(5,10,4,18,15,26))
Run Code Online (Sandbox Code Playgroud)

我玩弄了几种解决这个问题的方法,最后得到了以下解决方案:

require(dplyr)    
filtered.main_data =
    main_data %>% 
    rowwise() %>% 
    mutate(present = any(Day >= spans_to_filter$Start & Day <= spans_to_filter$End)) %>% 
    filter(present) %>% 
    data.frame()
Run Code Online (Sandbox Code Playgroud)

这工作得非常好,但是我注意到如果我有大量数据可能需要一段时间来处理(我假设因为我正在进行逐行比较).我还在学习R的来龙去脉,我想知道是否有更有效的方法来执行此操作,最好是使用dplyr/tidyr?

r dplyr

14
推荐指数
2
解决办法
3227
查看次数

data.table高效回收V2

这是这个问题的后续:data.table 高效回收

这里的区别在于,每条线的未来年份数不一定相同..

我经常在 data.table 中使用回收,例如当我需要预测未来几年时。我会重复未来每年的原始数据。

这可能会导致类似的情况:

library(data.table)
dt <- data.table(1:500000, 500000:1, rpois(500000, 240))
dt2 <- dt[, c(.SD, .(year = 1:V3)), by = 1:nrow(dt) ]
Run Code Online (Sandbox Code Playgroud)

但我经常需要处理数百万行,以及比这个玩具示例多得多的列。时间增加..试试这个:

library(data.table)
dt <- data.table(1:5000000, 5000000:1, rpois(5000000, 240))
dt2 <- dt[, c(.SD, .(year = 1:V3)), by = 1:nrow(dt) ]
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有更有效的方法来达到这个目的?

谢谢你的帮助 !

r recycle data.table

2
推荐指数
1
解决办法
424
查看次数

标签 统计

r ×2

data.table ×1

dplyr ×1

recycle ×1