首页 > 解决方案 > 为两个字符串变量创建唯一 ID

问题描述

我有一个类似于以下的交易数据集:

df <- data.frame("Reporter" = c("USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "Africa","Africa", "Africa","Africa", "Africa","Africa", "Africa","Africa", "EU", "EU","EU", "EU", "EU", "EU", "EU", "EU"), 
                 "Partner" = c("Asia", "Asia", "Asia", "Asia","Africa","Africa", "Africa","Africa","EU", "EU","EU", "EU", "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA","Africa","Africa", "Africa","Africa"),
                 "Year" = c( 1970, 1970, 1980, 1980, 1970, 1970, 1980, 1980, 1970, 1970, 1980, 1980,  1970, 1970, 1980, 1980, 1970, 1970, 1980, 1980, 1970, 1970, 1980, 1980), 
                 "Flow" = c("Import", "Export","Import", "Export","Import", "Export","Import", "Export","Import", "Export","Import", "Export","Import", "Export","Import", "Export","Import", "Export","Import", "Export", "Import", "Export","Import", "Export"),
                 "Val" = runif(24, min=0, max=100), stringsAsFactors = FALSE) 

需要注意的是,所有记者所在的国家也是合作伙伴setdiff(df$Reporter, df$Partner)。反之则不然setdiff(df$Partner, df$Reporter)。在真实数据中,我的合作伙伴国家比记者多 61 个。

我可以为报告变量和合作伙伴变量设置唯一 ID

df$repID <- as.numeric(factor(df$Reporter, 
                             levels=unique(df$Reporter)))
df$partID <- as.numeric(factor(df$Partner, 
                              levels=unique(df$Partner)))

使用这种技术的问题是 ID 不匹配两个 partID 和 repID。例如,repID 中的 USA ID 为“1”,partID 为“4”。

我想创建在两列中一致的国家/地区 ID,例如 USA 在 repID 和 partID 中都是“1”。此外,重要的是所有非记者(即亚洲)的合作伙伴都有自己的独特代码。

标签: runiqueidentifier

解决方案


这两个因素应该具有相同的水平。您应该为这两个因素的水平使用较大的集合(合作伙伴)。

df$repID  <- as.numeric(factor(df$Reporter, levels=unique(df$Partner)))
df$partID <- as.numeric(factor(df$Partner,  levels=unique(df$Partner)))

推荐阅读