R中的“匹配”通信

时间:2015-03-27 06:46:45

标签: r match

在我的“dataset1”中,我有一种字典,每个代码对应一个状态。在我的第二个数据集“dataset2”中,我想将代码与正确的状态相匹配。我会很感激一个可推广的矢量化解决方案。

输入:

dataset1               

 V1         V2
001   'State1'
005   'State2'
011   'State3'
011   'State3'
005   'State2'
dataset2

 V1
011
001
011
005

期望的输出:

011   'State3'
001   'State1'
011   'State3'
005   'State2'

2 个答案:

答案 0 :(得分:2)

使用R merge功能:

result <- merge(unique(dataset1), dataset2, by = "V1", all.x=FALSE, all.y=TRUE)

> result
   V1     V2
1 001 State1
2 005 State2
3 011 State3
4 011 State3

这将包括来自dataset2的所有国家/地区,但只有dataset1中的唯一状态,如果它们出现在dataset2中。

答案 1 :(得分:0)

使用match的另一种方法。请注意,对于dataset1中的多个条目,match将使用遇到的第一个条目。

dataset3 <- data.frame(V1=dataset2$V1, 
                       V2=as.character(dataset1$V2[match(x = dataset2$V1, 
                                                         table = dataset1$V1)]))

并准确格式化:

cat(sprintf("%003.0f  '%s'\n", ds3$V1, ds3$V2))
# 011  'State3'
# 001  'State1'
# 011  'State3'
# 005  'State2'