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

Posted

技术标签:

【中文标题】如何将列转换为数字,而它同时包含字符串和数字作为字符串【英文标题】:how to convert a column to numeric while it contains both strings and numbers as strings 【发布时间】:2019-06-07 10:44:16 【问题描述】:

我有一个数据框,其中有一列我想用来与另一个数据框连接。该列包含数字作为字符串和字符串如下:

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

如何将数字作为字符串转换为数字并用零/空替换字符串?

我试过x %&gt;% mutate_if(is.character,as.numeric)

但它返回以下错误:

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

【问题讨论】:

您的预期输出是什么样的? Converting data frame column from character to numeric的可能重复 也无法重现您的错误。您使用的是什么 R 和 dplyr 版本? 【参考方案1】:

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

【讨论】:

OP 有一个数据框,它似乎将referenceNumber 作为factor,在数字之前需要as.character【参考方案2】:

我会在 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

【讨论】:

【参考方案3】:

可能由于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

【讨论】:

以上是关于如何将列转换为数字,而它同时包含字符串和数字作为字符串的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL如何编写宏,将列变量为A的字符型数字,自动转换为数值型并替代原单元值?

python Pandas - 将列转换为字符串或数字类型

如何在不知道 NA 值模式的情况下快速将列转换为数字

如何将列值作为smartmatch的数字范围

将列号转换为字母的功能?

如何在不丢失科学记数法的情况下将列转换为单个管道分隔的列?