【问题标题】:Creating unique ID for two string variables为两个字符串变量创建唯一 ID
【发布时间】:2018-09-26 16:56:06
【问题描述】:

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

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。 例如而美国 ID 在 repID 中为“1”,在 partID 中为“4”。

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

【问题讨论】:

  • 尝试使用lvls &lt;- unique( apply(df[1:2],1, function(x) paste(sort(x), collapse=" ")))创建相同的levels
  • 你也可以这样做df$repID &lt;- as.numeric(factor(df$Reporter, levels=unique(c(df$Reporter, df$Partner)))); df$partID &lt;- as.numeric(factor(df$Partner, levels=unique(c(df$Reporter, df$Partner)))) 按照你提供的代码的理念。
  • 非常感谢这解决了我的问题!

标签: r uniqueidentifier


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多