【发布时间】:2021-05-12 09:12:20
【问题描述】:
我有一个data.frame,需要根据列的后缀将多个列融合在一起。因此,所有以“from”结尾的列都应该合并为一列,对于以“to”结尾的列和所有没有后缀的列都一样,这就是我的问题,因为如果不附加没有后缀的列名,我就无法融合“xxx”。问题是如何将空后缀与names_pattern 中的正则表达式匹配,或者是否有不重命名的不同解决方案?我也对data.table这个问题的解决方案感兴趣。
library(tibble)
library(magrittr)
library(tidyr)
data <-
tibble::tribble(
~"abc", ~"abcfrom", ~"abcto", ~"def", ~"deffrom", ~"defto",
1, "2019-05-16", NA, 0, NA, NA,
1, "2020-01-01", "2020-10-15", 1, "2014-12-17", "2015-03-05",
1, NA, NA, 1, "2015-01-01", NA
)
data %>%
dplyr::rename("abcxxx" = "abc", "defxxx" = "def") %>%
tidyr::pivot_longer(
everything(),
names_to = c("variable", ".value"),
names_pattern = "(.+)(xxx|from|to)"
)
# A tibble: 6 x 4 variable xxx from to <chr> <dbl> <chr> <chr> 1 abc 1 2019-05-16 NA 2 def 0 NA NA 3 abc 1 2020-01-01 2020-10-15 4 def 1 2014-12-17 2015-03-05 5 abc 1 NA NA 6 def 1 2015-01-01 NA
【问题讨论】: