使用data.table
代码寻找更优雅的解决方案,以实现以下目标:
我有两个数据表,可以通过以下示例捕获:
library("data.table")
A <- data.table(country_name = c("afghanistan", "albania", "algeria"),
country_rank = c(1:3)) #primary data table
B <- data.table(country_name = c("afghanistan", "albania", "algeria"),
A2 = c("AF", "AL", "DZ")) #reference data table
A
# country_name country_rank
# 1: afghanistan 1
# 2: albania 2
# 3: algeria 3
B
# country_name A2
# 1: afghanistan AF
# 2: albania AL
# 3: algeria DZ
我想在A中添加一个新列,即两个字母的国家/地区代码,包含在B.我正在使用dplyr
完成此操作,我觉得这是一种非常复杂的方式;我觉得阅读命令是不必要的混乱。我想知道data.table
中的模拟解决方案。
FYI在dplyr中:
A <- mutate(A, A2 = B[match(A$country_name, B$country_name), A2])
A
country_name country_rank A2
1: afghanistan 1 AF
2: albania 2 AL
3: algeria 3 DZ
非常感谢!
答案 0 :(得分:1)
您可以使用dplyr中的连接执行以下操作:
library(dplyr)
inner_join(A, B)
Joining by: "country_name"
country_name country_rank A2
1 afghanistan 1 AF
2 albania 2 AL
3 algeria 3 DZ
您可以使用select
重新定位您需要的最后一列。
如果B
没有所有国家/地区名称,您可以使用left_join
代替NAs
到缺失的行中。
答案 1 :(得分:1)
data.table
设置为非常自然地执行这些连接,但您需要先指定公共密钥。
setkey(A, country_name)
setkey(B, country_name)
A[B] ## join A with B on the common key 'country_name'
country_name country_rank A2
1: afghanistan 1 AF
2: albania 2 AL
3: algeria 3 DZ