格式化字符列中的小数位。 as.numeric 删除列中的值

Formatting decimal places in a character column. as.numeric erase the values in the column

我正在处理一个数据集,其中一列包含具有许多小数的变量。

示例:

,958229561278528615818098193915712388824
2,05561009284393218251509777394193942492
2,72096803821411321343605598060792704404
2,00324997757400185789440370684992098409

而且我需要对小数位进行不同的格式化。 该列在 R 中被读取为字符。只要它保持不变,我就不能使用任何函数,例如 round() 或类似的函数。

问题在于

as.numeric((data$value))
as.numeric((as.character(data$value))

都将删除我的列,还给我一列 NA。 我还尝试直接从界面导入数据集并将列转换为数字,但它只给出了列的 "unknown" 格式,并且像这样格式化数字: 6.8e+38 1.9e+38 5.9e+38

我也不想要。

额外信息:数据集是通过操作(合并,left_join)其他数据集直接在 R 中创建的。

非常感谢任何帮助!

我假设您所在的位置使用逗号作为小数点,并且可能使用小数点代替千位分隔符。

举个例子:

df <- c(',958229561278528615818098193915712388824', '2,05561009284393218251509777394193942492', '2,72096803821411321343605598060792704404', '2,00324997757400185789440370684992098409')

首先,删除所有小数点,因为它们可能是千位分隔符。然后,用小数点替换逗号:

as.numeric(gsub(',', '.', gsub('\.', '', df)))

编辑:但是,如果您打算使用多于前几个小数位,您可能 运行 会遇到精度问题。如果您需要任意精度,请查看包 Rmpfr