我有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
为什么我的价值观被打破了?如何正确地将值转换为双精度?
感谢您的回答!
答案 0 :(得分:4)
您的小数分隔符有问题(默认情况下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)