我有df1:
Account Score1 Score2 Score3 Score4 Score5 Score6 Random Random2
23 F30 G1 G5 H10 J18 NULL 3 4
42 NULL NULL NULL NULL NULL NULL 5 6
56 D10 D11 NULL NULL NULL NULL 6 2
59 X14 D3 F4 A11 A12 A13 8 2
41 D11 D12 NULL NULL NULL NULL 7 7
45 C3 C10 R4 T5 NULL NULL 1 1
30 C4 NULL NULL NULL NULL NULL 1 5
33 D2 D3 NULL NULL NULL NULL 3 4
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的数据框,从 6 个分数列中获取值并将它们放入名为 的单个列中Score。如果有多个分数,那么我需要多行数据。
我希望输出df2看起来像:
Account Score
23 F30
23 G1
23 G5
23 H10
23 J18
56 D10
56 D11
59 X14
59 D3
59 F4
59 A11
59 A12
59 A13
41 D11
41 D12
45 C3
45 C10
45 R4
45 T5
30 C4
33 D2
33 D3
Run Code Online (Sandbox Code Playgroud)
如果值为"NULL",那么我们可以将select感兴趣的列转换为长格式pivot_longer并filter输出"NULL"元素
library(dplyr)\nlibrary(tidyr)\ndf1 %>% \n select(Account, starts_with("Score")) %>% \n pivot_longer(cols = -Account, names_to = NULL, values_to = "Score") %>% \n filter(Score != "NULL")\nRun Code Online (Sandbox Code Playgroud)\n-输出
\n# A tibble: 22 \xc3\x97 2\n Account Score\n <int> <chr>\n 1 23 F30 \n 2 23 G1 \n 3 23 G5 \n 4 23 H10 \n 5 23 J18 \n 6 56 D10 \n 7 56 D11 \n 8 59 X14 \n 9 59 D3 \n10 59 F4 \n# \xe2\x80\xa6 with 12 more rows\nRun Code Online (Sandbox Code Playgroud)\ndf1 <- structure(list(Account = c(23L, 42L, 56L, 59L, 41L, 45L, 30L, \n33L), Score1 = c("F30", "NULL", "D10", "X14", "D11", "C3", "C4", \n"D2"), Score2 = c("G1", "NULL", "D11", "D3", "D12", "C10", "NULL", \n"D3"), Score3 = c("G5", "NULL", "NULL", "F4", "NULL", "R4", "NULL", \n"NULL"), Score4 = c("H10", "NULL", "NULL", "A11", "NULL", "T5", \n"NULL", "NULL"), Score5 = c("J18", "NULL", "NULL", "A12", "NULL", \n"NULL", "NULL", "NULL"), Score6 = c("NULL", "NULL", "NULL", "A13", \n"NULL", "NULL", "NULL", "NULL"), Random = c(3L, 5L, 6L, 8L, 7L, \n1L, 1L, 3L), Random2 = c(4L, 6L, 2L, 2L, 7L, 1L, 5L, 4L)),\n class = "data.frame", row.names = c(NA, \n-8L))\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |