为两个字符串变量创建唯一的ID

时间:2018-09-26 16:56:06

标签: r uniqueidentifier id

我无法为数据集提供唯一且一致的案例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)))

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

我想创建在两列中一致的国家/地区ID,例如,美国的repID和partID均为“ 1”。同样重要的是,所有不是记者的合作伙伴(即亚洲)都必须拥有自己的唯一代码。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

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