如何将列转换为数字,同时它包含字符串和数字作为字符串
how to convert a column to numeric while it contains both strings and numbers as strings
我有一个数据框,其中有一列我想用来连接另一个数据框。该列包含作为字符串的数字和如下字符串:
x<-data.frame(referenceNumber=c("80937828","gdy","12267133","72679267","72479267"))
如何将数字作为字符串转换为数字并将字符串替换为 zeros/null?
我试过了x %>% mutate_if(is.character,as.numeric)
但是returns出现以下错误:
"Error in UseMethod("tbl_vars") :
no applicable method for 'tbl_vars' applied to an object of class "character""
我们可以尝试只使用 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 的评论进行编辑:如果 column/vector 实际上是 factor
,则必须将其转换为字符才能使我上面的答案生效。
我会在 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
可能是因为 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
我有一个数据框,其中有一列我想用来连接另一个数据框。该列包含作为字符串的数字和如下字符串:
x<-data.frame(referenceNumber=c("80937828","gdy","12267133","72679267","72479267"))
如何将数字作为字符串转换为数字并将字符串替换为 zeros/null?
我试过了x %>% mutate_if(is.character,as.numeric)
但是returns出现以下错误:
"Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "character""
我们可以尝试只使用 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 的评论进行编辑:如果 column/vector 实际上是 factor
,则必须将其转换为字符才能使我上面的答案生效。
我会在 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
可能是因为 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