我的輸入如下。
我想要做什么:對于每個group(在資料集中是唯一的),我正在嘗試構建一個新變數,例如,countrypairlist列出每個組的所有國家/地區對。您會看到,所需的資訊以兩種不同的方式隱含在上述資料中。
首先,變數countries列出一個特定的所有相關國家group(例如,對于第一行,只有一個國家,JP)。其次,如果虛擬變數的名稱列在特定組的變數中,則以虛擬變數命名countries(例如,變數JP) ,否則。== 1countries== 0
使用任一組變數(以更容易和計算效率更高的為準),我想創建countrypairlist列出所有國家對的變數,以“,”分隔。例如,對于group == 4253247,我需要countrypairlist == LI-BE, LI-NL, BE-NL(順序無關緊要,只要列出所有對)。作為另一個例子,對于group == 27439823,我需要countrypairlist == DK-CH, DK-DE, CH-DE. 當只有一個國家時(或countrypairlist等效地,當.NA0countriesrowSum(over dummy variables) == 1
最有效的方法是什么?謝謝!
structure(list(group = c(26344962L, 26947173L, 7681129L, 32322556L,
27784632L, 34854057L, 37831629L, 37903977L, 38752541L, 35655241L,
39744060L, 39864671L, 38513906L, 39829036L, 39768832L, 39682597L,
39789349L, 40566389L, 39760845L, 39832290L, 39870577L, 40032764L,
39743044L, 35519833L, 34609489L, 39734460L, 39744800L, 7672727L,
32313557L, 34957472L, 39643836L, 39616295L, 4257105L, 26020976L,
4253247L, 39410092L, 38187175L, 39204726L, 39294100L, 39294069L,
39226773L, 39231044L, 39410460L, 39284069L, 27407686L, 10861963L,
18556217L, 27481648L, 26068821L, 27439823L), countries = c("JP",
"US", "DE", "NL", "JP", "DE", "DE", "DE", "DE", "DE", "DE", "DE",
"DE", "DE", "DE, DD", "DE, US", "DE", "DE", "DE", "DE", "DE",
"DE", "DE", "DE", "DE", "DE, AT", "DE, AT", "DE", "DE", "CH",
"CH, DE", "AT", "CH, AT, US", "DE", "LI, BE, NL", "DE", "DE",
"DE", "DE", "DE", "DE", "US, DE", "DE", "DE", "US, AU, FR", "NL, GB, US",
"JP", "JP", "CH, SE, DK", "DK, CH, DE"), JP = c(1L, 0L, 0L, 0L,
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L), US = c(0L,
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
0L), DE = c(0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
0L, 0L, 0L, 0L, 1L), NL = c(0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L), DD = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), AT = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L), CH = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 1L, 1L), LI = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), BE = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), FR = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
0L), GB = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
1L, 0L, 0L, 0L, 0L), SE = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L), DK = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L), AU = c(0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,
0L)), row.names = c(NA, 50L), class = "data.frame")
uj5u.com熱心網友回復:
你可以做
library(tidyverse)
df %>%
mutate(countrypairlist = sapply(strsplit(df$countries, ", "), function(x) {
if(length(x) == 1) return(x)
paste(apply(combn(x, 2), 2, paste, collapse = "-"), collapse = ";")
})) %>%
select(group, countries, countrypairlist)
#> group countries countrypairlist
#> 1 26344962 JP JP
#> 2 26947173 US US
#> 3 7681129 DE DE
#> 4 32322556 NL NL
#> 5 27784632 JP JP
#> 6 34854057 DE DE
#> 7 37831629 DE DE
#> 8 37903977 DE DE
#> 9 38752541 DE DE
#> 10 35655241 DE DE
#> 11 39744060 DE DE
#> 12 39864671 DE DE
#> 13 38513906 DE DE
#> 14 39829036 DE DE
#> 15 39768832 DE, DD DE-DD
#> 16 39682597 DE, US DE-US
#> 17 39789349 DE DE
#> 18 40566389 DE DE
#> 19 39760845 DE DE
#> 20 39832290 DE DE
#> 21 39870577 DE DE
#> 22 40032764 DE DE
#> 23 39743044 DE DE
#> 24 35519833 DE DE
#> 25 34609489 DE DE
#> 26 39734460 DE, AT DE-AT
#> 27 39744800 DE, AT DE-AT
#> 28 7672727 DE DE
#> 29 32313557 DE DE
#> 30 34957472 CH CH
#> 31 39643836 CH, DE CH-DE
#> 32 39616295 AT AT
#> 33 4257105 CH, AT, US CH-AT;CH-US;AT-US
#> 34 26020976 DE DE
#> 35 4253247 LI, BE, NL LI-BE;LI-NL;BE-NL
#> 36 39410092 DE DE
#> 37 38187175 DE DE
#> 38 39204726 DE DE
#> 39 39294100 DE DE
#> 40 39294069 DE DE
#> 41 39226773 DE DE
#> 42 39231044 US, DE US-DE
#> 43 39410460 DE DE
#> 44 39284069 DE DE
#> 45 27407686 US, AU, FR US-AU;US-FR;AU-FR
#> 46 10861963 NL, GB, US NL-GB;NL-US;GB-US
#> 47 18556217 JP JP
#> 48 27481648 JP JP
#> 49 26068821 CH, SE, DK CH-SE;CH-DK;SE-DK
#> 50 27439823 DK, CH, DE DK-CH;DK-DE;CH-DE
使用reprex v2.0.2創建于 2022-10-06
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/511273.html
標籤:r变量级联虚拟变量克兰
