【问题标题】:Convert character to number without the loss of decimal in R将字符转换为数字而不丢失R中的小数
【发布时间】:2015-10-20 15:12:04
【问题描述】:

我们已经看到很多关于如何在将因子转换为数字时保存小数位的问题,例如thisthis。但我没有看到任何与字符数据而不是因子数据相同的东西。以下是我尝试但没有成功的方法:

f1 <- c("402313.01399128098", "402896.30908451998", "403165.63827027398", "403169.06116369402", "402891.96329268801", "402239.74412469601", 
        "402271.54950727499", "402313.01399128098")
as.numeric(as.character(f1)) # does not work

f2 <- as.factor(f1) 
as.numeric(as.character(f2)) # my decimals are GONE

f3 <- levels(f2) 
as.numeric(f3) # my decimals are gone again

我明白了

[1] 402239.7 402271.5 402313.0 402892.0 402896.3 403165.6 403169.1

答案/cmets后更新:

没有丢失小数位。但我不知道为什么它没有显示。使用options(digits = 15),我可以看到所有小数。

教训:您可以在决定提出此类问题之前运行options()

【问题讨论】:

  • 我不认为你会失去任何东西。您只会看到以不同小数位数表示的值。
  • @Minnow,R inferno(我喜欢)谈论数字的有限精度表示,但它并没有(尽可能多地)谈论内部结构和外部表示之间的区别......

标签: r


【解决方案1】:

所有的数字都还在。这只是默认的打印方式。

new.vec <- as.numeric(f1)
print(new.vec, digits=20)
#[1] 402313.01399128098 402896.30908451998 403165.63827027398
#[4] 403169.06116369402 402891.96329268801 402239.74412469601
#[7] 402271.54950727499 402313.01399128098

您也可以使用options(digits = n) 更改默认设置。

更多信息here

【讨论】:

  • 你将如何存储这些值?
  • 你也可以和as.character(as.numeric(f1))比较
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2022-11-18
相关资源
最近更新 更多