当包含字符串和数字作为字符串时,如何将列转换为数字

时间:2019-06-07 10:44:16

标签: r dataframe number-formatting

我有一个数据框,其中有我要用于与其他数据框联接的列。该列包含数字和字符串,如下所示:

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 :(得分:0)

我们可以尝试仅使用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,则必须将其强制转换为字符,以便上面的答案起作用。

答案 1 :(得分:0)

我将检查ifelse构造中的NA:

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

答案 2 :(得分:0)

可能由于referenceNumber是因子:

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