Ошибка в if (output1! = Arg) {: аргумент имеет нулевую длину - PullRequest
0 голосов
/ 13 октября 2019

Я пытался gsub некоторые грязные данные, такие как эти "CD 9";"cTT-9"; "ли" во фрейме данных путем построения функции;и затем примените его к фрейму данных

. Я проверил несколько входных данных, например, "cds 9";"cTT-9"; "lee", и все они дали мне ожидаемые результаты как "CDS9"; "CTT9"; "LEE"

`data_clean <- function(arg) { 
   outcome<-arg
   output1<-gsub(pattern=" ",replacement="",arg)
   if (output1!=arg){outcome<-output1}
   output2<-gsub(pattern="-",replacement="",arg)
   if (output2!=arg){outcome<-output2}
   toupper(outcome)
 }

 df<-lapply(df, data_clean)`    

Однако, когда я добавляю функцию к моему фрейму данных,он распечатал это:

"Ошибка в if (output1! = arg) {: аргумент нулевой длины"

PS кадр данных выглядит следующим образом: введите описание изображения здесь

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете применить gsub и toupper к каждому столбцу с lapply, затем рекомбинировать результаты, используя do.call и cbind:

df <- data.frame(
  A = c("A b", "a-B", "Ab"),
  B = c("c D", "c-D", "cD")
)

do.call(cbind, lapply(df, function(x) toupper(gsub("\\s|-", "", x))))
#>      A    B   
#> [1,] "AB" "CD"
#> [2,] "AB" "CD"
#> [3,] "AB" "CD"

Создано в 2019-10-14 представлением пакета (v0.3.0)

gsub использует регулярное выражение \\s|- для замены пробела (\\s) или тире(-) с "".

...