【问题标题】:Introducing NA to as.numeric [duplicate]将 NA 引入 as.numeric [重复]
【发布时间】:2016-09-14 12:42:53
【问题描述】:

我有这个字符串变量

mystr <- "98,015"

我想把它转换成数字。

所以我使用:

num <- as.numeric(mystr)

但我收到此错误:

Warning message:
NAs introduced by coercion

这引入了 NA 而不是数字。如果使用"21" 之类的字符串,我会成功获取该号码。我能做什么?

【问题讨论】:

  • readr::parse_number("98,015")

标签: r


【解决方案1】:

我们可以使用sub, 替换为"",然后将其转换为numeric。由于 , 字符,应用 as.numeric 会将其强制转换为 NA。

as.numeric(sub(",", "", mystr))

如果,代表.,则将其替换为.(基于@RHertel的cmets)

as.numeric(sub(",", ".", mystr))

尚不清楚 OP 的原始数据集是 data.frame 还是只是 vector。如果是data.frame,在用read.csv/read.table读取时,我们可以指定dec=","

【讨论】:

  • 谢谢。它有效as.numeric(sub(",", "", mystr))!如果我有“1,071,911”这样的数字该怎么办
  • @Jason_K 在这种情况下,您可以使用gsub 而不是sub(但从您的示例中,我认为每个数字只有一个“,”
【解决方案2】:

gsub 函数也有同样的作用

mystr <- c("98,015","10,125","11,456")

mystr <- as.numeric(gsub("\\,","",mystr))

class(mystr)
 [1] "numeric"

【讨论】:

  • 您不需要转义逗号,与其他答案有什么区别,除了无用地使用gsub 而不是sub ?
  • 感谢 Cath 的更新将尝试其他功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
相关资源
最近更新 更多