【问题标题】:All values converted to NA while converting character to numeric将字符转换为数字时,所有值都转换为 NA
【发布时间】:2016-04-16 08:01:07
【问题描述】:

当我将数据框列转换为数字时,所有值都变为 NA

offense[,2:13] <- apply(offense[,2:13],2,as.numeric)

The converted data frame.

Dataframe before conversion.

它们都是数字,没有逗号,我什至尝试使用

删除空格,如果有的话
as.data.frame(apply(offense,2,function(x)gsub('\\s+','',x)))

但值仍会在类型转换时转换为 NA 并显示警告消息。

我从 URL 获取数据(数据科学食谱第 3 章)

offense <- readHTMLTable(url, encoding = "UTF-8", colClasses="character")[[7]]

【问题讨论】:

  • 请提供一个可重现的例子。也可以使用lapply(offense[,2:13], as.numeric)
  • 已经试过了,数值没有转成NA而是改成一些随机整数。
  • 在这种情况下,您需要使用dputdput(droplevels(head(yourdataset))) 提供一个可重现的小示例
  • 分享您从中获取数据的url。为什么colClasses="character" 参数?很奇怪,因为你想要数值。
  • ' url sports.yahoo.com/nfl/stats/…)' 认为从字符转换为数字会更容易,但没想到

标签: r


【解决方案1】:

导入的变量是因子,所以你必须使用,例如

as.numeric(as.character(offense$`Pts/G`))

apply(offense[, 2:13], 2, function(x) as.numeric(as.character(x)))

?factor:

要将因子 f 转换为近似其原始数值, 推荐使用 as.numeric(levels(f))[f],效率稍高一些 比 as.numeric(as.character(f))。

(但是,第一种方法对我不起作用,也许我犯了一个错误,但是使用 as.numeric(as.character()) 的第二种方法有效)

【讨论】:

  • 虽然您的回答确实有帮助,但真正的问题是每个值中都有尾随空格,我可以使用 str_trim 库中的 str_trim 函数删除这些空格。
  • 因为我没有你的数据,所以我不知道。我从您提供的链接下载的数据没有任何字符串修改。
猜你喜欢
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多