R 用相似的名称合并两个数据?

R 用相似的名称合并两个数据?,r,merge,R,Merge,是否可以按具有相似名称的列合并两个数据集 country <- c("United States of America", "China", "Russia Federation") scores <- c(1, 2, 3) df.1 <- cbind(country, scores) country <- c("United States", "China", "Russians") scores <- c(3, 2, 1) df.2 <- cbind(c

是否可以按具有相似名称的列合并两个数据集

country <- c("United States of America", "China", "Russia Federation")
scores <- c(1, 2, 3)
df.1 <- cbind(country, scores)

country <- c("United States", "China", "Russians")
scores <- c(3, 2, 1)
df.2 <- cbind(country, scores)

unsucessful.merge <- merge(df.1, df.2, by=c("country"))
unsucessful.merge
>   country scores.x scores.y
> 1   China        2        2

如果您已经知道所有的国家名称排列,那么可以使用正则表达式

df.1 <- apply(df.1,2,function(x) gsub(".*United States.*|USA","United States",x,ignore.case=T))
df.1 <- apply(df.1,2,function(x) gsub(".*Russia.*","Russia",x,ignore.case=T))
df.2 <- apply(df.2,2,function(x) gsub(".*United States.*|USA","United States",x,ignore.case=T))
df.2 <- apply(df.2,2,function(x) gsub(".*Russia.*","Russia",x,ignore.case=T))
merge(df.1, df.2, by=c("country"))
        country scores.x scores.y
1         China        2        2
2        Russia        3        1
3 United States        1        3

df.1如果你已经知道所有的国家名称排列,你可以使用正则表达式

df.1 <- apply(df.1,2,function(x) gsub(".*United States.*|USA","United States",x,ignore.case=T))
df.1 <- apply(df.1,2,function(x) gsub(".*Russia.*","Russia",x,ignore.case=T))
df.2 <- apply(df.2,2,function(x) gsub(".*United States.*|USA","United States",x,ignore.case=T))
df.2 <- apply(df.2,2,function(x) gsub(".*Russia.*","Russia",x,ignore.case=T))
merge(df.1, df.2, by=c("country"))
        country scores.x scores.y
1         China        2        2
2        Russia        3        1
3 United States        1        3

df.1我认为@Masoud的想法是正确的。将所有不同的名称映射回一个代码,然后在该代码上合并。有一些软件包可以处理加入过程中的一些模糊性,比如-但显然这不适用于比较缩略语或历史名称不尽相同的情况,例如
朝鲜/朝鲜
缅甸/缅甸
。谢谢大家。我想知道这个数据帧是否在对其他数据进行分类,是否有一种方法可以将两个名称相似的数据集合并。我认为@Masoud的想法是正确的。将所有不同的名称映射回一个代码,然后在该代码上合并。有一些软件包可以处理加入过程中的一些模糊性,比如-但显然这不适用于比较缩略语或历史名称不尽相同的情况,例如
朝鲜/朝鲜
缅甸/缅甸
。谢谢大家。我想知道这个数据帧是否在对其他数据进行分类,是否有一种方法可以用相似的名称合并两个数据集。我不是下选者,但
apply(df.1,2,…)
并不理想,因为它会将
df.1
中的每个变量转换为相同的类型。它还将替换
df.1
列中的数据,而不是
国家
列中的数据。无可否认,OP已经不明智地使用了字符矩阵,因为
cbind(country,scores)
而不是
data.frame(country,scores)
,但是
apply
是不必要的。谢谢你的辛勤工作。我非常感激。现在很晚了,所以我明天去看一下。再次表示感谢。我向上投票了向下投票以平衡负面性++我不是向下投票人,但
apply(df.1,2,…)
并不理想,因为它会将
df.1
中的每个变量转换为相同的类型。它还将替换
df.1
列中的数据,而不是
国家
列中的数据。无可否认,OP已经不明智地使用了字符矩阵,因为
cbind(country,scores)
而不是
data.frame(country,scores)
,但是
apply
是不必要的。谢谢你的辛勤工作。我非常感激。现在很晚了,所以我明天去看一下。再次表示感谢。我投了反对票以平衡负面影响++