如何在不丢失小数的情况下将数据框中的字符转换为数字
Posted
技术标签:
【中文标题】如何在不丢失小数的情况下将数据框中的字符转换为数字【英文标题】: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)
更好地检查您的数据。
【参考方案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。格洛腾迪克以上是关于如何在不丢失小数的情况下将数据框中的字符转换为数字的主要内容,如果未能解决你的问题,请参考以下文章
如何在不丢失数据点顺序的情况下将 Pandas 中的字符串列表分解为单个列表
如何在不丢失 swift 精度的情况下将 String 转换为 Double [重复]
如何在不丢失 Xampp 中的数据的情况下将类型从 varchar 更改为 Date