【发布时间】:2020-01-07 13:15:56
【问题描述】:
我正在阅读 R 中结构良好的文本数据,并且在从字符转换为数字的过程中,数字会丢失小数位。
我曾尝试使用round(digits = 2),但由于我首先必须应用as.numeric,所以它不起作用。有一次,我确实在转换之前设置了options(digits = 2),但它也不起作用。
最终,我希望得到一个data.frame,它的数字与被视为字符的数字完全相同。
我在这里寻求帮助并确实找到了this、this 和this 之类的答案;但是,没有人真正帮助我解决了这个问题。
从字符转换为时如何防止数字舍入 数字?
这是我编写的一段可重现的代码。
library(purrr)
my_char = c(" 246.00 222.22 197.98 135.10 101.50 86.45
72.17 62.11 64.94 76.62 109.33 177.80")
# Break characters between spaces
my_char = strsplit(my_char, "\\s+")
head(my_char, n = 2)
#> [[1]]
#> [1] "" "246.00" "222.22" "197.98" "135.10" "101.50" "86.45"
#> [8] "72.17" "62.11" "64.94" "76.62" "109.33" "177.80"
# Convert from characters to numeric.
my_char = map_dfc(my_char, as.numeric)
head(my_char, n = 2)
#> # A tibble: 2 x 1
#> V1
#> <dbl>
#> 1 NA
#> 2 246
# Delete first value because it's empty
my_char = my_char[-1,1]
head(my_char, n = 2)
#> # A tibble: 2 x 1
#> V1
#> <dbl>
#> 1 246
#> 2 222.
【问题讨论】:
-
sapply(my_char, as.numeric)? -
您的数字未四舍五入。运行您发布的代码后查看
sprintf("%0.17f", my_char[[1]]) -
你确定不是打印方法限制了小数位数吗?
-
试试
print.data.frame(na.omit(map_dfc(strsplit(my_char, "\\s+"), as.numeric)), digits = 4) -
转换为真正的 R 数据框显示没有四舍五入,尝试
as.data.frame(my_char)。
标签: r character number-formatting