как преобразовать столбец в числовой, если он содержит строки и числа в виде строк - PullRequest
0 голосов
/ 07 июня 2019

У меня есть фрейм данных, в котором есть столбец, который я хочу использовать для соединения с другим фреймом данных.Столбец содержит число в виде строки и строки, такие как:

x<-data.frame(referenceNumber=c("80937828","gdy","12267133","72679267","72479267"))

Как преобразовать числа в виде строки в числовые и заменить строки нулями / нулями?

Я пытался x %>% mutate_if(is.character,as.numeric)

Но возвращается следующая ошибка:

"Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "character""

Ответы [ 3 ]

0 голосов
/ 07 июня 2019

Я бы проверил наличие NA в конструкции ifelse:

x<-data.frame(referenceNumber=c("80937828","gdy","12267133","72679267","72479267"), stringsAsFactors = F)

x$referenceNumber <- ifelse(!is.na(as.numeric(x$referenceNumber)), x$referenceNumber, 0)

Это работает, только если ваши строки не являются факторами.В противном случае вам нужно сначала добавить as.character.

0 голосов
/ 07 июня 2019

Возможно, из-за ссылочного номера это фактор:

x<-data.frame(referenceNumber=c("80937828","gdy","12267133","72679267","72479267"), stringsAsFactors=F)
str(x)
#'data.frame':   5 obs. of  1 variable:
# $ referenceNumber: chr  "80937828" "gdy" "12267133" "72679267" ...
xx<-x %>% mutate_if(is.character,as.numeric)
#Warning message:
#In evalq(as.numeric(referenceNumber), <environment>) :
#  NAs introduced by coercion
xx
#  referenceNumber
#1        80937828
#2              NA
#3        12267133
#4        72679267
#5        72479267
str(xx)
#'data.frame':   5 obs. of  1 variable:
# $ referenceNumber: num  80937828 NA 12267133 72679267 72479267
0 голосов
/ 07 июня 2019

Мы могли бы попробовать просто использовать as.numeric, что назначило бы NA для любой нечисловой записи в векторе.Затем мы можем выборочно заменить значения NA на ноль:

x <- c("80937828","gdy","12267133","72679267","72479267")
output <- as.numeric(x)
output[is.na(output)] <- 0
output

[1] 80937828        0 12267133 72679267 72479267

Редактировать на основе комментария @Sotos: если столбец / вектор на самом деле factor, то его нужно будет привестиперсонажу, чтобы мой ответ работал выше.

...