【发布时间】:2019-10-29 14:57:47
【问题描述】:
我有两个格式如下的数据集:
df1
#> Artist Album Year
#> 1 Beatles Sgt. Pepper's 1967
#> 2 Rolling Stones Sticky Fingers 1971
和
df2
#> Album Year Producer
#> 1 Sgt. Pepper's 1966 George Martin
#> 2 Sticky Fingers 1971 Jimmy Miller
我想按专辑和年份创建inner_join,但有时“年份”字段会偏离一年:例如,Sgt. Peppers 在 df1 中被列为 1967 年,在 df2 中被列为 1966 年。
所以如果我跑:
df3 <- inner_join(df1, df2, by = c("Album", "Year"))
我明白了:
df3
#> Artist Album Year Producer
#> 1 Rolling Stones Sticky Fingers 1971 Jimmy Miller
然而,我希望两张专辑都加入,只要像 (df1$Year == df2$Year + 1)|(df1$Year == df2$Year - 1) 这样的东西。
我不能只是简单地通过“专辑”连接,因为在我的真实数据集中有一些同名的“专辑”以“年份”来区分。
以下数据集的代码:
df1 <- data.frame(stringsAsFactors=FALSE,
Artist = c("Beatles", "Rolling Stones"),
Album = c("Sgt. Pepper's", "Sticky Fingers"),
Year = c(1967, 1971)
)
df1
df2 <- data.frame(stringsAsFactors=FALSE,
Album = c("Sgt. Pepper's", "Sticky Fingers"),
Year = c(1966, 1971),
Producer = c("George Martin", "Jimmy Miller")
)
df2
【问题讨论】:
标签: r dplyr inner-join tidyverse fuzzyjoin