如何将基于时间的数据或值添加到 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
我有问题。我有一个时间序列,我有来自其他数据的值。现在我只想将第二个数据值添加到新列的时间序列中。为了更好地理解,我附上了一个例子。 我拥有的数据
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