2017-07-06 27 views
0

我有两个数据集。一个具有重复的地点名称,另一个具有地点名称和其长度。我想将lat long添加到位置名称与第二个数据集匹配的第一个数据集。根据条件从R中的另一个数据集的一个数据集中添加列值 - 不同的长度

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 and if with sapply。由于列表很长(超出查询最大值),因此使用地理编码获取df1的纬度长度失败。有什么想法吗?

+1

您可以在站名上合并。像'df3 < - merge(df1,df2,by =“station name”)''。 – lmo

回答

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=参数。

+1

它与。我需要更多地阅读关于dplyr。谢谢 – Sanju

+0

不客气!了解'dplyr'是提高数据科学技能的最佳途径之一。 –

+2

@Sanju在这种情况下,绝对不需要“*阅读dplyr *”。这是一个非常基本的操作,R可以在不加载任何依赖的情况下轻松执行(尤其是像tidyverse这样的巨大依赖,它会加载大量您可能不需要的东西。请参阅您的问题的重复目标已关闭。 R,你只需要简单地执行'merge(df1,df2)'或'merge(df1,df2,all.x = TRUE)'(取决于你需要的连接类型(见'merge'),并且你都设置了。 –

0

它看起来像一个SQL问题。所以在R图书馆dplyr是最好的选择。 这里工作示例中,列名必须等于为加入

library(dplyr) 
iris 
iris2<-data.frame("Species"=unique(iris$Species),"n"=c(1,2,3)) 
iris %>% inner_join(iris2) 

PS你可以分享你的数据库使用dput(dataframename)命令,这实在是容易,以帮助相关的例子

+2

“图书馆dplyr是最好的选择”是一个非常主观的说法。对于像SQL一样的连接,我总是使用'data.table',因为它更快。 – SymbolixAU

+0

你是对的,我应该说这是广泛使用,这是所有 –

相关问题