【发布时间】:2019-12-24 15:36:38
【问题描述】:
使用tidyr >= 1.0.0,可以在cols 参数中使用tidy 选择,如下所示:
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols=starts_with("DL_TM"),
names_to = "TM",values_to = "DM_TM") %>%
pivot_longer(cols=starts_with("DL_CD"),
names_to = "CD",values_to = "DL_CD") %>%
na.omit() %>%
select(-TM,-CD)
但是,上面的内容很快就会变得繁琐(重复),有很多列,如何将其简化为单个 pivoting?! 我想象过一些概念上的东西
pivot_longer(cols=starts_with("DL_TM | DL_CD")....) 这显然不起作用,因为 tidy 选择仅适用于单一模式(据我所知)。
数据
df <- structure(list(DL_TM1 = c(16L, 18L, 53L, 59L, 29L, 3L), DL_CD1 = c("AK",
"RB", "RA", "AJ", "RA", "RS"), DL_TM2 = c(5L, 4L, 8L, NA, 1L,
NA), DL_CD2 = c("CN", "AJ", "RB", NA, "AJ", NA), DL_TM3 = c(NA,
NA, 2L, NA, NA, NA), DL_CD3 = c(NA, NA, "AJ", NA, NA, NA), DL_TM4 = c(NA,
NA, NA, NA, NA, NA), DL_CD4 = c(NA, NA, NA, NA, NA, NA), DL_TM5 = c(NA,
NA, NA, NA, NA, NA), DL_CD5 = c(NA, NA, NA, NA, NA, NA), DEP_DELAY_TM = c(21L,
22L, 63L, 59L, 30L, 3L)), class = "data.frame", row.names = c(NA,
-6L))
预期输出:
与上述相同,但使用单个 pivoting。
【问题讨论】:
-
@G.Grothendieck 这确实可以解决问题。我不知道
names_pattern能做到这一点。 -
已将评论移至答案。