[英]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.