'Matching' R 中的对应关系
'Matching' Correspondence in R
在我的 "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'
使用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
中。
另一种使用 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'
在我的 "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'
使用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
中。
另一种使用 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'