Регулярное выражение в R: Как sub () несколько значений столбца одновременно? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь сделать следующий скрипт более лаконичным.

SH1$SCORING7_01 = sub("-", "", SH1$SCORING7_01)    
SH1$SCORING7_02 = sub("-", "", SH1$SCORING7_02)    
SH1$SCORING7_03 = sub("-", "", SH1$SCORING7_03)    
SH1$SCORING7_04 = sub("-", "", SH1$SCORING7_04)    
SH1$SCORING7_05 = sub("-", "", SH1$SCORING7_05)    

По сути, я просто удаляю '-' из значений каждого столбца. (Это часть более крупного процесса.) Есть ли способ, которым я мог бы использовать () '-' из всех пяти значений столбца одновременно? Число этих указанных c столбцов 'SCORING_XX' фактически увеличивается до 38 и может увеличиться в будущем. Так что что-то, включающее диапазон столбцов, было бы замечательно (пример: SCORING7_01: SCORING7_XX).

Я запускаю "R version 3.6.2 (2019-12-12)" на Windows

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

data.table

С data.table вы можете использовать .SD и lapply:

dt <- data.table(df)
dt[,lapply(.SD, function(x) sub("-","",x)), .SDcols = paste0("SCORING7_0",1:5)] 

base R

Вы также можете использовать база R раствор

df[,paste0("SCORING7_0",1:5)] <- lapply(paste0("SCORING7_0",1:7), function(var) sub("-","",df[,var]))
0 голосов
/ 03 апреля 2020

Вот базовая опция R:

names <- c("SCORING7_01", "SCORING7_02", "SCORING7_03", "SCORING7_04", "SCORING7_05")
SH1[names] <- lapply(SH1[names], function(x) sub("-", "", x, fixed=TRUE))

Обратите внимание, что я использую опцию fixed=TRUE в приведенном выше вызове sub, так как ваша логика замены c на самом деле не требует каких-либо регулярных выражение.

...