Bri*_*ian 3 pivot r dataframe tidyr
我目前正在尝试使用 R 中的pivot_longer 函数转置(宽到长)多个变量。
这是我所拥有的
primary_id = c("A1", "A2")
id1 = c("B1", "B2")
score1 = c("good", "bad")
id2 = c("C1", "C2")
score2 = c(NA, "neutral")
id3 = c("D1", "D2")
score3 = c("bad", "neutral")
id4 = c("E1", "E2")
score4 = c(NA, "good")
have = data.frame(primary_id, id1, score1, id2, score2, id3, score3, id4, score4)
have
primary_id id1 score1 id2 score2 id3 score3 id4 score4
1 A1 B1 good C1 <NA> D1 bad E1 <NA>
2 A2 B2 bad C2 neutral D2 neutral E2 good
Run Code Online (Sandbox Code Playgroud)
请注意,我有 20 个 id 变量和 20 个 Score 变量(示例仅显示 4 个)
这就是我正在寻找的
primary_id ids scores
1 A1 B1 good
2 A1 C1 <NA>
3 A1 D1 bad
4 A1 E1 <NA>
5 A2 B2 bad
6 A2 C2 neutral
7 A2 D2 neutral
8 A2 E2 good
Run Code Online (Sandbox Code Playgroud)
任何建议/帮助将不胜感激!请注意,分数变量到处都有 NA。
在基数 R 中:
\nreshape(have,-1, dir='long', sep='', idvar = 'primary_id')\n\n primary_id time id score\nA1.1 A1 1 B1 good\nA2.1 A2 1 B2 bad\nA1.2 A1 2 C1 <NA>\nA2.2 A2 2 C2 neutral\nA1.3 A1 3 D1 bad\nA2.3 A2 3 D2 neutral\nA1.4 A1 4 E1 <NA>\nA2.4 A2 4 E2 good\nRun Code Online (Sandbox Code Playgroud)\n在数据表中:
\nlibrary(data.table)\nmelt(setDT(have),1, patterns(id = '^id', score = '^score'))\n primary_id variable id score\n1: A1 1 B1 good\n2: A2 1 B2 bad\n3: A1 2 C1 <NA>\n4: A2 2 C2 neutral\n5: A1 3 D1 bad\n6: A2 3 D2 neutral\n7: A1 4 E1 <NA>\n8: A2 4 E2 good\nRun Code Online (Sandbox Code Playgroud)\n在整洁的宇宙中
\nlibrary(tidyverse)\npivot_longer(have, -1, names_to = '.value', names_pattern = '(\\\\D+)')\n\n# A tibble: 8 \xc3\x97 3\n primary_id id score \n <chr> <chr> <chr> \n1 A1 B1 good \n2 A1 C1 NA \n3 A1 D1 bad \n4 A1 E1 NA \n5 A2 B2 bad \n6 A2 C2 neutral\n7 A2 D2 neutral\n8 A2 E2 good \nRun Code Online (Sandbox Code Playgroud)\n