我想将特定列中的值匹配到不同的数据帧,并检索仅第一个匹配的整行数据,而不是所有组合。
我尝试使用 left_join,但它只是检索所有数据。
# First table
cusip <- c("AAA1", "AAA2","AAA3")
Datecode <- c("201912", "202003", "202006")
FirstTable <- data_frame(cusip,Datecode)
#Lookuptable
cusip <- c("AAA1", "AAA1","AAA2","AAA2","AAA3","AAA3")
Name <- c("Facebook Inc", "Facebook", "Apple","Apple INC", "Amz", "Amazon")
LookupTable <- data_frame(cusip,Name)
所以我想要的是在 FirstTable 中创建一个 Name 列,它从 Lookuptable 中检索 Name。但是,我不在乎它是否说 Facebook 或 Facebook Inc for AAA1。
一个简单的 Left_join 保留所有组合,所以当我只想要 3 时给我 6 行。
希望有人能帮忙,谢谢!
相对较新的 R 用户
library(dplyr)
left_join(FirstTable,
LookupTable %>% group_by(cusip) %>% slice(1))
Joining, by = "cusip"
# A tibble: 3 x 3
cusip Datecode Name
<chr> <chr> <chr>
1 AAA1 201912 Facebook Inc
2 AAA2 202003 Apple
3 AAA3 202006 Amz
快速data.table
方法
library(data.table)
#make them data.tables
setDT(LookupTable); setDT(FirstTable)
#perform update join
FirstTable[ LookupTable, Name := i.Name, on = .(cusip)]
# cusip Datecode Name
# 1: AAA1 201912 Facebook
# 2: AAA2 202003 Apple INC
# 3: AAA3 202006 Amazon
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(53条)