首页 > 解决方案 > 转向凌乱的数据

问题描述

我有看起来像这样的数据

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_RND ID
ABT MLC 7
ABT MLC 8
AK MLC 7
MLC 4
MLC 5

我怎样才能做到这一点?我尝试了 pivot_longer/wider 但真的很困惑....

请帮忙!

标签: rpivot

解决方案


我们可以使用pivot_longer重塑为“长”格式,然后filter将值不是“0”的“MLC”列separate转换为列

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"))

推荐阅读