【发布时间】: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 <- unique( apply(df[1:2],1, function(x) paste(sort(x), collapse=" ")))创建相同的levels -
你也可以这样做
df$repID <- as.numeric(factor(df$Reporter, levels=unique(c(df$Reporter, df$Partner)))); df$partID <- as.numeric(factor(df$Partner, levels=unique(c(df$Reporter, df$Partner))))按照你提供的代码的理念。 -
非常感谢这解决了我的问题!
标签: r uniqueidentifier