【问题标题】:How to convert character in dataframe to numeric without the loss of decimal如何在不丢失小数的情况下将数据框中的字符转换为数字
【发布时间】:2019-06-12 12:14:02
【问题描述】:

假设有以下格式的数据库

Voltage Global_intensity Sub_metering_1
 <chr>   <chr>            <chr>         
1 234.840 18.400           0.000         
2 233.630 23.000           0.000         
3 233.290 23.000           0.000         
4 233.740 23.000           0.000         
5 235.680 15.800           0.000         
6 235.020 15.000           0.000         
7 235.090 15.800           0.000         
8 235.220 15.800           0.000         
9 233.990 15.800           0.000         
10 233.860 15.800           0.000         
# ... with 2,075,249 more rows

我想将此列类型的字符变量转换为数字而不丢失小数位

df1$Voltage <-as.double(df1$Voltage,options(digits = 8))
 Voltage Global_intensity Sub_metering_1
     <dbl> <chr>            <chr>         
 1    235. 18.400           0.000         
 2    234. 23.000           0.000         
 3    233. 23.000           0.000         
 4    234. 23.000           0.000         
 5    236. 15.800           0.000         
 6    235. 15.000           0.000         
 7    235. 15.800           0.000         
 8    235. 15.800           0.000         
 9    234. 15.800           0.000         
10    234. 15.800           0.000         
# ... with 2,075,249 more rows

现在我得到这样的结果,丢失了十进制数字。怎么整?

【问题讨论】:

  • 你试过用as.numeric代替as.double吗?
  • 检查df1$Voltage,这是tibble而不是R
  • 是的,但它显示的结果与我使用 as.double 得到的结果相同
  • @PoGibas 我不明白你的意思,那么你建议如何改变?
  • 使用View(df1) 更好地检查您的数据。

标签: r dataframe double numeric tibble


【解决方案1】:

关键是要区分显示的内容和存储的内容。 Voltage 仍以全精度存储。

DF[] <- lapply(DF, as.numeric)
DF$Voltage
## [1] 234.84 233.63 233.29 233.74 235.68 235.02 235.09 235.22 233.99 233.86

注意

Lines <- "Voltage Global_intensity Sub_metering_1
1 234.840 18.400           0.000         
2 233.630 23.000           0.000         
3 233.290 23.000           0.000         
4 233.740 23.000           0.000         
5 235.680 15.800           0.000         
6 235.020 15.000           0.000         
7 235.090 15.800           0.000         
8 235.220 15.800           0.000         
9 233.990 15.800           0.000         
10 233.860 15.800           0.000"

library(tibble)
DF <- as_tibble(read.table(text = Lines, colClasses = "character"))

【讨论】:

  • 非常感谢,@G。格洛腾迪克
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 2020-11-20
  • 2016-09-11
  • 2020-01-11
相关资源
最近更新 更多