如何将基于时间的数据或值添加到 r 中的时间序列

how to add data or values based on time to the time series in r

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

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

基数 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 

要匹配预期输出的名称,base:

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