gpt4 book ai didi

R:如何为数据框中的无序对创建 ID 变量

转载 作者:行者123 更新时间:2023-12-04 17:38:08 24 4
gpt4 key购买 nike

我有一个数据框,其中包含成对国家之间贸易流量的变量,一个国家是导出国,一个国家是每一行的进口国。

我想创建一个 ID 号变量来标识每个无序 国家/地区对,为每对国家/地区提供相同的 ID 号,而不管哪个是导出商,哪个是进口商。因此,澳大利亚-美国将与美国-澳大利亚具有相同的 ID,但与澳大利亚-英国的 ID 不同。

这是带有 ID 变量的数据的示例。

YEAR     ISO_EXP     ISO_IMP     UNORD_PAIR_ID
1970 AUS GBR 1
1970 AUS USA 2
1970 AUS ZIM 3
1970 GBR AUS 1
1970 GBR USA 4
1970 GBR ZIM 5
1970 USA AUS 2
1970 USA GBR 4
1970 USA ZIM 6
1970 ZIM AUS 3
1970 ZIM GBR 5
1970 ZIM USA 6

我的数据集有大约 200 万行,包含 47 年来大约 44,000 个国家/地区对。

我已使用以下代码为每个订购 国家/地区对创建一个 ID。

data$ORD_PAIR_ID <- data %>% group_indices(data$ISO_EXP, data$ISO_IMP)

但我一直无法弄清楚如何为无序 对创建 ID。

非常感谢任何帮助。

最佳答案

我们可以使用 pmin/pmax 对 ISO_EXP、ISO_IMP 中的元素进行排序,并在 group_indices 中使用它

library(dplyr)
df1 %>%
mutate(pairid = group_indices(., pmax(ISO_EXP, ISO_IMP),
pmin(ISO_EXP, ISO_IMP)))
# YEAR ISO_EXP ISO_IMP UNORD_PAIR_ID pairid
#1 1970 AUS GBR 1 1
#2 1970 AUS USA 2 2
#3 1970 AUS ZIM 3 4
#4 1970 GBR AUS 1 1
#5 1970 GBR USA 4 3
#6 1970 GBR ZIM 5 5
#7 1970 USA AUS 2 2
#8 1970 USA GBR 4 3
#9 1970 USA ZIM 6 6
#10 1970 ZIM AUS 3 4
#11 1970 ZIM GBR 5 5
#12 1970 ZIM USA 6 6

或者使用base R

v1 <- do.call(paste, as.data.frame(t(apply(df1[2:3], 1, sort))))
df1$pairid <- match(v1, unique(v1))

数据

df1 <- structure(list(YEAR = c(1970L, 1970L, 1970L, 1970L, 1970L, 1970L, 
1970L, 1970L, 1970L, 1970L, 1970L, 1970L), ISO_EXP = c("AUS",
"AUS", "AUS", "GBR", "GBR", "GBR", "USA", "USA", "USA", "ZIM",
"ZIM", "ZIM"), ISO_IMP = c("GBR", "USA", "ZIM", "AUS", "USA",
"ZIM", "AUS", "GBR", "ZIM", "AUS", "GBR", "USA"), UNORD_PAIR_ID = c(1L,
2L, 3L, 1L, 4L, 5L, 2L, 4L, 6L, 3L, 5L, 6L)), class = "data.frame",
row.names = c(NA, -12L))

关于R:如何为数据框中的无序对创建 ID 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55737780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com