R 为杂乱的数据进行数据透视

R 为杂乱的数据进行数据透视,r,pivot,R,Pivot,我有这样的数据 structure(list(V1 = c("ABT", "AK", "AT", "AZ", "BG", "BT"), V2.1 = c("MLC_7", "MLC_07", "MLC_04", "MLC_07", "0", "0"), V2.

我有这样的数据

structure(list(V1 = c("ABT", "AK", "AT", "AZ", "BG", "BT"), V2.1 = c("MLC_7", "MLC_07", "MLC_04", "MLC_07", "0", "0"), V2.2 = c("MLC_8", "0", "MLC_05", "RND_01", "0", "0"), V2.3 = c("0", "0", "0", "0", "0", "0"), V2.4 = c("0", "0", "0", "0", "0", "0"), V2.5 = c("0", "0", "0", "0", "0", "0")), row.names = c(NA, 6L), class = "data.frame")
我需要使用V2.1:V2.5中的变量,以便

V1 MLC\u RND 身份证件 ABT MLC 7. ABT MLC 8. AK MLC 7. 在 MLC 4. 在 MLC 5. 我们可以使用pivot_longer将其重新格式化为“long”格式,然后过滤值不是“0”的“MLC”列,并将其分为多个列

library(dplyr)
library(tidyr)
df1 %>%
  pivot_longer(cols = V2.1:V2.5, values_to = 'MLC') %>% 
  dplyr::filter(MLC != "0") %>%
  separate(MLC, into = c("MLC_RND", "ID"))
这里有一个data.table选项

    V1 MLC_RND ID
1: ABT     MLC  7
2: ABT     MLC  8
3:  AK     MLC  7
4:  AT     MLC  4
5:  AT     MLC  5
6:  AZ     MLC  7
7:  AZ     RND  1

枢轴、过滤和分离应足够长。如果显示您尝试的内容,则会更好。如果ID列需要为数字,则添加mutateID=as。numericID@BenNorris您可以单独使用convert=TRUE
    V1 MLC_RND ID
1: ABT     MLC  7
2: ABT     MLC  8
3:  AK     MLC  7
4:  AT     MLC  4
5:  AT     MLC  5
6:  AZ     MLC  7
7:  AZ     RND  1