簡體   English   中英

根據來自其他 dataframe 的時間序列間隔分配新的分組變量

[英]assign new grouping variable based on time series interval from other dataframe

我是 R 的相對新手,並且正在努力解決以下問題。 我有一個 dataframe,其中每秒測量一列 CO2 濃度,一列帶有日期時間(POSIXct),第二個 dataframe 帶有“開始”和“停止”日期時間。 我想做的是在新列中為 dataframe 分配一個分組變量(例如升序數字),其中 CO2 濃度基於第二個 dataframe 的開始/停止時間。

例如:開始 = 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 相當大,我將 output 放在一個文本文件中: CO2 dataframe 子集

這是第一次在這里提問(因為我之前的大部分問題都已經問過了),所以如果事情不清楚,我提前道歉。

根據我在評論中留下的鏈接,這是您的解決方案。

您的數據:

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缺乏的這種特殊連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM