r - 为两个字符串变量创建唯一 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”。此外,重要的是所有非记者(即亚洲)的合作伙伴都有自己的独特代码。
解决方案
这两个因素应该具有相同的水平。您应该为这两个因素的水平使用较大的集合(合作伙伴)。
df$repID <- as.numeric(factor(df$Reporter, levels=unique(df$Partner)))
df$partID <- as.numeric(factor(df$Partner, levels=unique(df$Partner)))
推荐阅读
- javascript - 如何使用 fs 从 json 文件中获取 ID
- reactjs - 语法错误 - collectionViewURL 未定义
- javascript - 如何创建一个从用户那里获取值的 java 对象?
- html - 自定义引导程序的导航栏切换器图标
- java - 设置 JTextFrame 的高度
- javascript - 日期输入不会改变用户输入的值
- javascript - 如何在 vue chrome 扩展中导入引导程序
- amazon-web-services - AWS:无法通过 s3 存储桶策略授予 s3 访问权限
- pine-script - 如何获得每周最低价格日期?
- c - 我不太确定这段代码的作用(位操作)