【问题标题】:how to add data or values based on time to the time series in r如何将基于时间的数据或值添加到r中的时间序列
【发布时间】:2022-01-27 23:44:32
【问题描述】:

我有问题。我有一个时间序列,我有其他数据的值。现在我只想将第二个数据值添加到新列的时间序列中。为了更好地理解,我附上一个例子。 我拥有的数据

time     value     
09:00    14  
09:10    25
09:13    44
09:16    33
09:24    22
09:30    55
09:45    33
09:55    45
10:00    22
10:05    33

time    value
09:13    22
09:30    33
09:45    22

所以,我有这样的数据,但超过 2000 行。 我只是想知道我们如何使用 2 个不同的数据并将它们同时放置以获取一个具有 3 列的数据框。 比如我的输出应该是这样的

time     value   values2 
09:00    14        0
09:10    25        0
09:13    44        22
09:16    33        0
09:24    22        0
09:30    55        33
09:45    33        22
09:55    45        0
10:00    22        0
10:05    33        0

【问题讨论】:

  • 尝试使用merge()函数,例如df3 value-column,例如names(df2) <- c("time", "value2").
  • 谢谢。有效。我正在寻找那个命令。非常感谢您的回答。

标签: r time-series xts


【解决方案1】:

基础R:

df.merged <- merge(df1, df2, by = "time", all = TRUE)

 df.merged
     time value.x value.y
 1: 09:00    14     NA
 2: 09:10    25     NA
 3: 09:13    44     22
 4: 09:16    33     NA
 5: 09:24    22     NA
 6: 09:30    55     33
 7: 09:45    33     22
 8: 09:55    45     NA
 9: 10:00    22     NA
10: 10:05    33     NA

使用 dplyr:

library(dplyr)
df.joined <- df1 %>% 
  left_join(df2, by = "time")

 df.joined
     time value.x value.y
 1: 09:00    14     NA
 2: 09:10    25     NA
 3: 09:13    44     22
 4: 09:16    33     NA
 5: 09:24    22     NA
 6: 09:30    55     33
 7: 09:45    33     22
 8: 09:55    45     NA
 9: 10:00    22     NA
10: 10:05    33     NA 

要匹配您预期输出的名称,带有基数:

colnames(df2)[2] <- "value2" 
df.merged <- merge(df1, df2, by = "time", all = TRUE)

df.merged
     time value value2
 1: 09:00    14     NA
 2: 09:10    25     NA
 3: 09:13    44     22
 4: 09:16    33     NA
 5: 09:24    22     NA
 6: 09:30    55     33
 7: 09:45    33     22
 8: 09:55    45     NA
 9: 10:00    22     NA
10: 10:05    33     NA

或使用 dplyr 以编程方式:

df.joined <- df2 %>%
  rename_with(function(x) paste0(x, which(colnames(.)==x)), .cols = -time) %>% 
  right_join(df1, by = "time") %>% 
  arrange(time) %>% 
  select(time, value, everything())

df.joined

     time value value2
 1: 09:00    14     NA
 2: 09:10    25     NA
 3: 09:13    44     22
 4: 09:16    33     NA
 5: 09:24    22     NA
 6: 09:30    55     33
 7: 09:45    33     22
 8: 09:55    45     NA
 9: 10:00    22     NA
10: 10:05    33     NA

【讨论】:

  • 谢谢。有效。你已经很好地解释了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 2012-12-07
  • 2012-12-04
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多