【问题标题】:Combine two dataframes of different frequncies and unequal lenght in R在R中组合两个不同频率和不等长度的数据帧
【发布时间】:2022-01-03 22:48:45
【问题描述】:

我需要加入/合并两个具有不同频率和长度的数据帧,df1df2。在这些数据框中,日期对应于值(value1 和 value2)的更改日期。

数据框是:

State <- c(A,A,A,B,B,B)
Date1 <- c(01/01/2015, 02/04/2015, 12/01/2016, 03/02/2015, 02/05/2015, 25/01/2016)
Date2 <- C(01/02/2013, 01/04/2015, 19/07/2013, 23/01/2016)
value1 <- c(2.5, 3.2, 2.7, 3.1, 3.6, 2.8)
value2 <- c(0.12, 0.25, 0.2, 0.3)

df1 <- data.frame(State, Date1, value1)
df2 <- data.frame(State, Date2, value2)

那么我们有:

State   Date1       Value1
A       01/01/2015  2.5 
A       02/04/2015  3.2
A       12/01/2016  2.7
B       03/02/2015  3.1
B       02/05/2015  3.6
B       25/01/2016  2.8
State   Date2       Value2
A       01/02/2013  0.12    
A       01/04/2015  0.25
B       19/07/2013  0.20
B       23/01/2016  0.30

我想加入/合并这两个数据框并将它们调整为相同的时间频率(每天或每周)。对于每日频率,理想的结果是:

State   Date        Value1  Value2
A       01/02/2013  NA      0,12
A       02/02/2013  NA      0,12
(...)
A       01/01/2015  2,5     0,12
(...)
A       01/04/2015  2,5     0,25
A       02/04/2015  3,2     0,25
(...)
A       12/01/2016  2,7     0,25
(...)
B       19/07/2013  NA      0,20
(...)
B       03/02/2015  3,1     0,20
(...)
B       02/05/2015  3,6     0,20
(...)
B       23/01/2016  3,6     0,30
B       24/01/2016  3,6     0,30
B       25/01/2016  2,8     0,30

感谢任何帮助!

【问题讨论】:

  • 你能详细说明你所说的频率是什么意思吗?
  • 时间序列的频率:每天、每周等重复观察。我现在拥有的 df 没有恒定的频率。

标签: r dataframe join merge time-series


【解决方案1】:

我稍微修改了您提供的示例,我展示了如何使用dplyr's full_join 实现我认为您正在寻找的东西

library(dplyr)

State1 <- c("A","A","A","B","B","B")
State2 <- c("A","A","B","B")
Date1 <- c("01/01/2015", "01/04/2015", "12/01/2016", "03/02/2015", "02/05/2015", "25/01/2016")
Date2 <- c("01/02/2013", "01/04/2015", "19/07/2013", "23/01/2016")
value1 <- c(2.5, 3.2, 2.7, 3.1, 3.6, 2.8)
value2 <- c(0.12, 0.25, 0.2, 0.3)

df1 <- data.frame(state = State1, date = Date1, value = value1)
df2 <- data.frame(state = State2, date = Date2, value = value2)

full_join(df1, df2, by=c("state", "date"), suffix = c("1","2"))

这将返回以下内容

  state       date value1 value2
1     A 01/01/2015    2.5     NA
2     A 01/04/2015    3.2   0.25
3     A 12/01/2016    2.7     NA
4     B 03/02/2015    3.1     NA
5     B 02/05/2015    3.6     NA
6     B 25/01/2016    2.8     NA
7     A 01/02/2013     NA   0.12
8     B 19/07/2013     NA   0.20
9     B 23/01/2016     NA   0.30

希望对你有帮助。

【讨论】:

  • 感谢@Kasp 帮助!现在我只需要想办法在每个日期之间添加“缺失天数”并填充值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2014-04-12
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
相关资源
最近更新 更多