【问题标题】:Coercion of numeric columns with decimals and points用小数和点强制数字列
【发布时间】:2021-09-07 02:03:01
【问题描述】:

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

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"
    )

【问题讨论】:

  • as.numeric(gsub(',|\\.', '', x))
  • 感谢@Sotos,它没有按我预期的方式工作。
  • 很好观察@Ronak Shah,我输入了所需的输出。

标签: r coercion


【解决方案1】:

在基础 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 = ','))

【讨论】:

  • 非常感谢@Ronak Shah,fixed = TRUE 是什么意思?
  • 类似sub/gsub/grep/grepl的函数使用正则表达式来匹配/提取文本。 . 在正则表达式中具有特殊含义,但这里我们要匹配文本中的文字 .,因此我们包含 fixed = TRUE,以便它与 . 完全匹配。
  • 非常感谢@Ronak Shah,效果很好。
猜你喜欢
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2018-05-10
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多