带小数点和小数点的数字列的强制转换

Coercion of numeric columns with decimals and points

我想知道如何将值转换为数字,因为它们涉及小数和点。感谢您的帮助。

c("1.139,0000", "1.160,0000", "1.160,0000", "1.160,0000", "1.160,0000", 
"1.194,0000", "1.533,3500", "1.550,0000", "1.550,0000", "1.602,0000", 
"1.825,0000", "1.825,0000", "1.825,0000", "1.825,0000", "1.825,0000", 
"1.825,0000", "1.825,0000", "1.825,4000", "1.825,0000", "1.825,0000", 
"2.042,1234", "2.200,0000", "2.200,0000", "2.200,0000", "2.200,0000", 
"2.200,0000", "2.200,0000", "2.200,0000", "2.200,0000", "2.200,0000", 
"2.200,0000", "2.200,0000", "2.200,0000", "2.200,0000", "2.200,0000"
)

期望的输出:

c("1139.0000", "1160.0000", "1160.0000", "1160.0000", "1160.0000", 
    "1194.0000", "1533.3500", "1550.0000", "1550.0000", "1602.0000", 
    "1825.0000", "1825.0000", "1825.0000", "1825.0000", "1825.0000", 
    "1825.0000", "1825.0000", "1825.4000", "1825.0000", "1825.0000", 
    "2042.1234", "2200.0000", "2200.0000", "2200.0000", "2200.0000", 
    "2200.0000", "2200.0000", "2200.0000", "2200.0000", "2200.0000", 
    "2200.0000", "2200.0000", "2200.0000", "2200.0000", "2200.0000"
    )

在 base R 中,您可以使用 sub 删除 . 并将 , 替换为 .

as.numeric(sub(',', '.', sub('.', '', x, fixed = TRUE), fixed = TRUE))

# [1] 1139.000 1160.000 1160.000 1160.000 1160.000 1194.000 1533.350 1550.000
# [9] 1550.000 1602.000 1825.000 1825.000 1825.000 1825.000 1825.000 1825.000
#[17] 1825.000 1825.400 1825.000 1825.000 2042.123 2200.000 2200.000 2200.000
#[25] 2200.000 2200.000 2200.000 2200.000 2200.000 2200.000 2200.000 2200.000
#[33] 2200.000 2200.000 2200.000

我们也可以使用 readr 中的 parse_number 指定 decimal_mark 作为逗号。

library(readr)
parse_number(x, locale = locale(decimal_mark = ','))