r语言 - 从字符串转换为双精度 - "NAs introduced by coercion"



我有一个看起来像这样的String List

> (eventWindow_120After_CDaxReturnList)
  [1] "0,625955157"  "0,891329602"  "-0,933230106" "1,003888748"  "2,506553435" 
  [6] "0,28025201"   "0,049992392"  "-1,528220714" "-1,488603538" "-0,386465313"
 [11] "-1,540656795" "-0,354434553" "-0,541072307" "0,151894577"  "-0,368113215"
 [16] "-1,311859207" "-0,53398643"  "0,447652847"  "0,811091009"  "-0,762542616"
 [21] "0,113097041"  "1,644291169"  "0,372942122"  "-2,598940355" "0,295887764" 
 [26] "0,497623141"  "2,172205688"  "1,674827159"  "-0,790143018" "-2,699961458"
 [31] "0,1808649"    "-1,390725823" "0,042100198"  "-1,149402509" "1,164795509" 
 [36] "-2,242082157" "0,413271933"  "1,544733319"  "-1,737815654" "0,664162878" 
 [41] "-0,270073137" "1,269689166"  "0,294329649"  "1,737589375"  "0,388540112" 
 [46] "2,726718904"  "-1,76846884"  "2,95523593"   "-0,226810242" "1,388351601" 
 [51] "-1,837513976" "-0,687213225" "-0,269547411" "-2,240833418" "0,391682389" 
 [56] "-0,990822708" "0,079247353"  "-0,344248021" "-2,002301953" "0,486559783" 
 [61] "-0,210928483" "1,556058524"  "0,710287982"  "-2,385966306" "0,55334705"  
 [66] "-0,542398474" "3,363864131"  "-1,289276302" "0,98053264"   "-2,619356125"
 [71] "-0,119462419" "0,171523166"  "-0,793430946" "0,439197917"  "1,621698037" 
 [76] "0,740559896"  "-0,995044918" "-0,797282446" "-0,737846361" "-0,146560773"
 [81] "-1,427121159" "0,959889623"  "0,227182932"  "-1,469586375" "-0,213654462"
 [86] "-0,172567573" "-0,599402525" "na"           "na"           "-0,223072633"
 [91] "0,767367503"  "0"            "-1,509657226" "na"           "0,061110687" 
 [96] "-0,131596514" "0,095450814"  "-0,327276187" "-0,072252961" "1,611313974" 
[101] "-0,407919801" "-0,530163834" "1,820166037"  "-0,62552046"  "-0,804902413"
[106] "2,028576469"  "1,682045559"  "1,026838746"  "0,967656685"  "-0,576036866"
[111] "0,509903504"  "1,649940115"  "-1,135110857" "-0,822062039" "-1,039934278"
[116] "0,616923046"  "2,530127953"  "1,962230747"  "-0,765498201" "-0,343914793"

现在我想将这些值转换为double以进行一些计算。我试过as.double(),但是我得到了:

> (as.double(eventWindow_120After_CDaxReturnList))
  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [26] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [51] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [76] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA  0 NA NA NA NA NA NA NA NA
[101] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Warning message:
NAs introduced by coercion 

为什么我的价值观被打破了?如何正确将值转换为双精度值?

感谢您的回答!

小数分隔符有问题(R 默认假定.)。最简单的解决方案可能只是将逗号转换为句点(句号)

testDat <- c("0,123","2,13","na")
as.double(gsub(",",".",testDat))

由于数据集中的"na"值,您仍会收到一些警告;您可以通过单独转换"na"值来避免这些警告,如下所示:

NAvals <- testDat=="na"
res <- numeric(length(testDat))
res[NAvals] <- NA
res[!NAvals] <- as.double(gsub(",",".",testDat[!NAvals]))

可能还有某种方法可以重置您的区域设置(?Sys.setlocale ),以便它自动工作,但我无法弄清楚。

这是另一种方法:

scan(text=testDat,dec=",",na.strings="na",quiet=TRUE)

最新更新