如何解决根据id和时间连接两个时间序列
我想根据一个 ID 变量连接两个时间序列。
我的第一个时间系列,
library(tidyverse)
library(lubridate)
id <- c(11,11,12,12)
time <- c("2020-11","2020-12","2021-01","2021-01")
values <- c(10,20,25,100,200)
data1 <- data.frame(id,time,values)
data1$time <- ym(data1$time)
第二个时间序列如下,
time <- c("2020-10","2020-11","2021-02")
trend <- c(0.1,0.2,0.3,0.4,0.5,0.6,0.7)
data2 <- data.frame(Time,trend)
data2$time <- ym(data2$time)
注意,第一个数据框有 5 行,第二个有 7 行。连接的数据框应该有 5 行。
现在我想通过 id 和 date 将第二个数据框加入第一个。我正在做以下事情,
newdata <- dplyr::inner_join(data1,data2,by = "time")
newdata
> newData
id Time values trend
1 11 2020-11-01 10 0.2
2 11 2020-12-01 20 0.3
3 11 2020-12-01 20 0.5
4 11 2021-01-01 25 0.4
5 11 2021-01-01 25 0.6
6 12 2020-12-01 100 0.3
7 12 2020-12-01 100 0.5
8 12 2021-01-01 200 0.4
9 12 2021-01-01 200 0.6
这不是我想要的。 id 中有重复。数据框有 9 行而不是 5 行。我的预期输出应该是这样的,
> newData
id time values trend
1 11 2020-11-01 10 0.2
2 11 2020-12-01 20 0.3
3 11 2021-01-01 25 0.4
4 12 2020-12-01 100 0.3
5 12 2021-01-01 200 0.4
知道如何实现这一目标吗?
解决方法
在base R
中,我们可以使用match
来获取位置并提取对应的值
newData <- data1
newData$trend <- data2$trend[match(data1$time,data2$time)]
-输出
newData
id time values trend
1 11 2020-11-01 10 0.2
2 11 2020-12-01 20 0.3
3 11 2021-01-01 25 0.4
4 12 2020-12-01 100 0.3
5 12 2021-01-01 200 0.4
如果我们在两个数据集中都执行 merge
或连接重复的 by
,将导致笛卡尔连接
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。