以逗号作为小数分隔符的数据框

Posted

技术标签:

【中文标题】以逗号作为小数分隔符的数据框【英文标题】:data frame with commas as decimal separator 【发布时间】:2018-01-11 14:54:24 【问题描述】:

我有数据框作为 csv 文件,数字用逗号分隔作为小数点分隔符,我设法使用 read.csv2 在 R 中导入和读取它。但现在数字被视为characters

我想要做的是用点替换逗号并有一个numeric 值。

我的 df 看起来像这样:

var1 <- c("50,0", "72,0", "960,0", "1.920,0", "50,0", "50,0", "960,0")
var2 <- c("40,0", "742,0", "9460,0", "1.920,0", "50,0", "50,0", "960,0")
var3<- c("40,0", "72,0", "90,0", "1,30", "50,0", "50,0", "960,0")
df <- data.frame(cbind(var1, var2, var3))

但是在这种情况下,数字被视为因素而不是字符

【问题讨论】:

as.numeric(sub(',', '.', your_var, fixed = TRUE)) 我认为这是重复的,但是:as.numeric(gsub(",",".",var))?一个可重现的例子会非常有用。 @Sotos,我的变量可以是我的数据框的子集还是需要为每一列替换 您可以申请,例如df[c(1, 4, 5)] &lt;- lapply(df[c(1, 4, 5)], function(i) as.numeric(sub(',', '.', i, fixed = TRUE))) 会将sub 应用于第 1、4 和 5 列。如需进一步帮助,请发布可重现的示例 @Sotos 工作得很好! 【参考方案1】:

读取.csv文件时,可以根据文件类型指定sepdec参数:

# assuming file uses ; for separating columns and , for decimal point
# Using base functions 
read.csv(filename, sep = ";", dec = ",")

# Using data.table
library(data.table)
fread(filename, sep = ";", dec = ",")

您应首先尝试解决问题的根源,只有在未能获得所需结果时才应使用正则表达式和其他变通方法。

【讨论】:

以上是关于以逗号作为小数分隔符的数据框的主要内容,如果未能解决你的问题,请参考以下文章

用逗号作为小数分隔符的数字的 Google 表单正则表达式

将逗号小数分隔符转换为数据框中的点

将逗号小数分隔符转换为数据框中的点

在数据库查询中使用逗号作为小数分隔符

如何在 Python Pandas 中使用逗号作为小数分隔符的浮点格式?

Dygraphs,逗号作为小数分隔符