【问题标题】:Changing character to numeric in data.frame (as.numeric) with thousand separator使用千位分隔符将 data.frame(as.numeric)中的字符更改为数字
【发布时间】:2017-11-12 10:18:26
【问题描述】:

我使用read.csv 导入具有数值的 CSV 文件,其中 CSV 分隔符为“;”,十进制分隔符为“,”,另外 thousend 分隔符为“.”

Hist <- read.csv(file = "XXXX", header = T, sep = ";", dec =",", stringsAsFactors=FALSE)

我将其转换为 data.table ...

Hist <- data.table(Hist)

它看起来像这样:

  Date        Value
# 2017-11-12  12.456,89
# 2017-11-10  13.234,99
# 2017-11-08  14.123,45

现在我想将“值”列的类/格式更改为数字,因为我想用它进行计算。但我尝试的一切都没有奏效。例如:

Hist[, Value := as.numeric(Value)]

正在创建错误:

警告信息: 在 eval(jsub, SDenv, parent.frame()) 中:强制引入的 NAs

有人可以帮忙吗?

【问题讨论】:

    标签: r csv numeric read.csv


    【解决方案1】:

    它们被读取为字符串。为了将它们转换为数字,请删除千位分隔符 (.),然后将小数分隔符 (,) 转换为点。

    Hist$Value = as.numeric(gsub(",",".",(gsub("\\.","",Hist$Value))))
    

    等同于:

    noPoints = gsub("\\.", "", Hist$Value)
    commaToPoint = gsub(",", ".", noPoints)
    Hist$Value = as.numeric(commaToPoint)
    

    【讨论】:

    • 解决方案是“\\.”在 gsub。我之前试过gsub( ".","," ...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2022-06-16
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    相关资源
    最近更新 更多