【问题标题】:as.numeric returns NA for no apparent reason for some of the values in a columnas.numeric 对列中的某些值无明显原因返回 NA
【发布时间】:2019-12-30 12:48:45
【问题描述】:

在尝试使用 as.numeric 将一列字符(数字字符串,例如“0.1234”)转换为数字时,会返回一些值NA,并带有警告“强制引入的 NA”。返回为NAs 的字符似乎与正确返回为数字的字符没有任何不同。有谁知道可能是什么问题?

已经尝试查找任何可以隐藏在某些值中的非数字字符(如“,”)。我确实找到了真正变成NAs 的包含'-'(例如“-0.123”)的字符串,但这些只是变成NAs 的字符串的一部分。另外,尝试在字符串中查找空格。这似乎也不是问题。

data$y
 [1] "0.833250539"  "0.820323535"  "0.462284612"  "0.792943985"  "0.860587952"  "0.729665177"  "0.461503956"  "0.625871118" 
 [9] "0.740999346"  "0.962727964"  "0.971089266"  "0.869004848"  "0.828651766"  "0.900648732"  "0.970326033"  "0.898123286" 
[17] "0.911640765"  "0.902442126"  "0.843392097"  "0.763421844"  "0.892426243"  "0.380433624"  "0.925017633"  "0.725470821" 
[25] "0.699924767"  "0.689061225"  "0.907462936"  "0.888064239"  "0.913547115"  "-‬0.625103904‭" "0.897385961"  "0.889727462" 
[33] "0.90127339"   "0.947012474"  "0.948883588"  "0.845845512"  "0.97866966"   "0.796247738"  "0.864627056"  "0.266656189‭" 
[41] "0.894915463"  "0.969690678"  "0.771365656‭"  "0.88304436"   "0.954039006"  "0.836952199"  "0.731558669‭"  "0.907224294" 
[49] "0.622059127"  "0.887742343"  "0.917550343"  "0.97240334‭"   "0.902841957"  "0.617403052"  "0.82926708"   "0.674903846" 
[57] "0.947132958"  "0.929213613‭"  "-‬0.297844476" "0.871767367"

y = as.numeric(data$y)

警告信息: 强制引入的 NA

y
 [1] 0.8332505 0.8203235 0.4622846 0.7929440 0.8605880 0.7296652 0.4615040 0.6258711 0.7409993 0.9627280 0.9710893 0.8690048 0.8286518
[14] 0.9006487 0.9703260 0.8981233 0.9116408 0.9024421 0.8433921 0.7634218 0.8924262 0.3804336 0.9250176 0.7254708 0.6999248 0.6890612
[27] 0.9074629 0.8880642 0.9135471        NA 0.8973860 0.8897275 0.9012734 0.9470125 0.9488836 0.8458455 0.9786697 0.7962477 0.8646271
[40]        NA 0.8949155 0.9696907        NA 0.8830444 0.9540390 0.8369522        NA 0.9072243 0.6220591 0.8877423 0.9175503        NA
[53] 0.9028420 0.6174031 0.8292671 0.6749038 0.9471330        NA        NA 0.8717674

【问题讨论】:

  • 虽然粘贴数据和代码非常好,但我同意有些地方不对劲。您能否使用dput 命令粘贴您的数据?如果您的数据框太大,则只是一个子集,其中包含一些以NA 返回的值。

标签: r na


【解决方案1】:

您的字符串包含一些非 Unicode 字符。如果您确定删除它们是安全的,请使用

as.numeric(iconv(data$y, 'utf-8', 'ascii', sub=''))

Ref 进行转换

【讨论】:

  • 这对我很有用。所有数字似乎都与它们看起来完全一样,所以我真的不明白问题是什么字符,但它仍然有效。谢谢!
【解决方案2】:

复制并粘贴你的角色给我(例如最后一个NA"-,0.297844476"。编码有问题。您可以使用解决方法

as.numeric(gsub(",","",data$y))

编辑此答案不适用于您的所有NAs...我真的不知道您的数据发生了什么,如果可能,请提供dput

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多