基于 R 中的模式合并列

gan*_*n3b 2 regex r coalesce dplyr

我在 R 中组合了数据集,每个数据集可能对相同的数据使用不同的列名。我需要使用正则表达式来标识需要组合的列的名称,然后通过合并运行该列名称列表。

我知道正确的正则表达式来标识我的列,并且我知道如何将列名手动写入合并函数以组合这些列,但我不知道如何自动合并使用正则表达式标识的列。

sample = data.frame("PIDno" = c('a', NA, NA), "PINID" = c(NA, 'b', NA), "ParcelId" = c(NA, NA, 'c'))

PID_search = paste("sample$",grep("*PID*|*PIN*|*PARCEL*",colnames(sample),ignore.case = TRUE, value = TRUE),sep = "")

sample$PID_combine = coalesce(sample$'PIDno',
                              sample$'PINID',
                              sample$'ParcelId')

Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

我们可以使用tidyverse. 选定的列将转换为characterwith mutate_at,然后将coalesce这些列转换为mutate

library(tidyverse)
sample %>%
    mutate_at(vars(matches("PID|PIN|Parcel")), as.character) %>% 
    mutate(new = coalesce(!!! select(., matches("PID|PIN|Parcel"))))
#    PIDno PINID ParcelId new
#1     a  <NA>     <NA>   a
#2  <NA>     b     <NA>   b
#3  <NA>  <NA>        c   c
Run Code Online (Sandbox Code Playgroud)