【问题标题】:assign new grouping variable based on time series interval from other dataframe根据来自其他数据帧的时间序列间隔分配新的分组变量
【发布时间】:2020-08-13 09:25:52
【问题描述】:

我是 R 的相对新手,正在努力解决以下问题。我有一个数据框,其中有一列每秒测量的二氧化碳浓度,一列带有日期时间(POSIXct),第二个数据框带有“开始”和“停止”日期时间。我想做的是在新列中为数据框分配一个分组变量(例如升序数字),其中 CO2 浓度基于第二个数据框的开始/停止时间。

例如:开始 = 13:30 停止=13:33,因此所有测得的 CO2 浓度如果处于开始/停止时间之间,就会得到分组变量“1”。

由于开始/停止时间的第一行和第二行之间有时间,因此也有许多 CO2 测量值应以“NA”作为分组变量。

这是开始/停止数据的子集:

times <- structure(list(Start = structure(c(1591266360, 1591266960), class = c("POSIXct",  "POSIXt"), tzone = ""), Stop = structure(c(1591266540, 1591267140 ), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = 1:2, class = "data.frame")

由于二氧化碳浓度的数据框相当大,我将输出放在一个文本文件中: CO2 dataframe subset.

这是第一次在这里提问(因为我之前的大部分问题都已经问过了),所以如果事情不清楚,我提前道歉。

【问题讨论】:

标签: r


【解决方案1】:

根据我在 cmets 中留给您的链接,这是您的解决方案。

您的数据:

times <- structure(list(Start = structure(c(1591266360, 1591266960), class = c("POSIXct",  "POSIXt"), tzone = ""), Stop = structure(c(1591266540, 1591267140 ), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = 1:2, class = "data.frame")
df <- eval(parse("df.text"))

解决方案:

library(dplyr)
library(fuzzyjoin)

# define a group per each row before joining
times <- times %>%
  mutate(group = row_number())


# fuzzy join! 
fuzzy_left_join(
  df, times,
  by = c("dt" = "Start", "dt" = "Stop"),
  match_fun = list(`>=`, `<=`)  # here you specify what function to use for the join!
)

fuzzyjoin 看起来是一个很酷的包。 它允许您执行dplyr 缺乏的这种特殊连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 2022-01-17
    • 2016-02-07
    • 2021-07-18
    • 2016-07-02
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多