Regex 基于时间列合并两个数据帧

Regex 基于时间列合并两个数据帧,regex,r,merge,Regex,R,Merge,我试图根据时间列合并两个数据帧。它们各自具有不同格式的时间值。它们看起来是这样的: Labourproductivity和DepressionFrame的示例数据集: Labourproductivity <- read.csv(text=" Time,LabourProductivity 2004 Q1,96.6 Q2,96.9 Q3,96.9 Q4,97.1 2005 Q1,97.6 Q2,99.0") Depressiondframe <- read.csv(text=" Ti

我试图根据
时间
列合并两个数据帧。它们各自具有不同格式的时间值。它们看起来是这样的:

Labourproductivity
DepressionFrame
的示例数据集:

Labourproductivity <- read.csv(text="
Time,LabourProductivity
2004 Q1,96.6
Q2,96.9
Q3,96.9
Q4,97.1
2005 Q1,97.6
Q2,99.0")
Depressiondframe <- read.csv(text="
Time,DepressionCount
2004.00,875
2004.25,820
2004.50,785
2004.75,857
2005.00,844")

如何基于
时间
合并两个数据帧

这里有一种可能的方法。我们将使用
zoo
包,该包将使用
zoo::as.yearqtr
函数轻松地将
DepressionFrame$Time
转换为所需的格式,而第二个更为复杂,我们将使用
stringi::stri_extract_first_regex
zoo::na.locf
来处理它。然后,只需简单的
合并
即可完成任务

library(zoo)
library(stringi)
Depressiondframe$Time <- as.character(as.yearqtr(Depressiondframe$Time))
Labourproductivity$Time <- with(Labourproductivity,
                                paste(na.locf(stri_extract_first_regex(Time, "\\d{4}")), 
                                stri_extract_first_regex(Time, "Q\\d")))

merge(Depressiondframe, Labourproductivity, by = "Time", all = TRUE)
#      Time DepressionCount LabourProductivity
# 1 2004 Q1             875               96.6
# 2 2004 Q2             820               96.9
# 3 2004 Q3             785               96.9
# 4 2004 Q4             857               97.1
# 5 2005 Q1             844               97.6
# 6 2005 Q2              NA               99.0
图书馆(动物园)
图书馆(stringi)

DepressionFrame$Time@zx8754在编辑时也添加语言标记如何:)@Davidernburg不知怎的错过了它,而且,这个问题更多的是关于将
2001 Q1
转换为
2000.00
而不是
merge
library(zoo)
library(stringi)
Depressiondframe$Time <- as.character(as.yearqtr(Depressiondframe$Time))
Labourproductivity$Time <- with(Labourproductivity,
                                paste(na.locf(stri_extract_first_regex(Time, "\\d{4}")), 
                                stri_extract_first_regex(Time, "Q\\d")))

merge(Depressiondframe, Labourproductivity, by = "Time", all = TRUE)
#      Time DepressionCount LabourProductivity
# 1 2004 Q1             875               96.6
# 2 2004 Q2             820               96.9
# 3 2004 Q3             785               96.9
# 4 2004 Q4             857               97.1
# 5 2005 Q1             844               97.6
# 6 2005 Q2              NA               99.0