我有两个数据集。一个具有重复的位置名称,另一个具有位置名称并且其纬度为long。我想将lat long添加到第一个数据集,其中位置名称在第二个数据集中匹配。
DF1
Code Station Name
BNC BANGALORE CANT
BNC BANGALORE CANT
BNC BANGALORE CANT
BBS BHUBANESWAR
BBS BHUBANESWAR
df2
Station Name lat lon
BANGALORE CANT 12.993690 77.59814
BHUBANESWAR 20.296059 85.82454
预期结果 DF1
Code Station Name lat lon
BNC BANGALORE CANT 12.993690 77.59814
BNC BANGALORE CANT 12.993690 77.59814
BNC BANGALORE CANT 12.993690 77.59814
BBS BHUBANESWAR 20.296059 85.82454
BBS BHUBANESWAR 20.296059 85.82454
很明显,物体长度不同。我需要df1重复条目。 cbind不会因长度不同而起作用。同样适用于 ifelse 和 sapply 。由于列表很长(超出查询最大值),因此使用地理编码获取df1的lat很长时间失败。有什么想法吗?
答案 0 :(得分:0)
它看起来像一个SQL问题。因此在R中,库dplyr是最佳选择。 这是一个工作示例,列的名称必须等于连接
library(dplyr)
iris
iris2<-data.frame("Species"=unique(iris$Species),"n"=c(1,2,3))
iris %>% inner_join(iris2)
PS你可以分享你的db use dput(dataframename)命令,帮助相关的例子真的更容易
答案 1 :(得分:0)
您可以使用dplyr::left_join
来解决此类问题。 dplyr有一个有用的vignette来覆盖连接,或者你可以查看这个常规backgrounder on different kinds of joins。
# Load dplyr and other useful packages
library(tidyverse)
# Generate demo dataset
df1 <-
tibble(
Code = c("BNC", "BNC", "BNC", "BBS", "BBS"),
"Station Name" = c(
"BANGALORE CANT",
"BANGALORE CANT",
"BANGALORE CANT",
"BHUBANESWAR",
"BHUBANESWAR"
)
)
df2 <- tibble("Station Name" = c("BANGALORE CANT", "BHUBANESWAR"),
lat = c(12.993690, 20.296059),
lon = c(77.59814, 85.82454))
# Join df1 and df2
left_join(df1, df2)
这假设两个数据集共享一个名称完全相同的列。如果要对两个数据集如何相互组合进行更多控制,可以使用by=
参数。