R中加载千位分隔符为点的CSV文件的最优雅方法

11

NB: 就我所知,这个问题不是一个重复的问题! 我找到的所有问题/答案要么是如何从已经在R中的数据中消除点,要么是当加载时如何将小数点改为逗号。

我有一个带有数字的csv文件,例如:4.123,98。问题是由于.,当使用read.tableread.csvread.csv2进行加载时,输出变成了一个字符串矩阵。将dec更改为,也没有帮助。

我的问题是:
如何以最优雅的方式加载此csv文件,以使数字变为例如4123.98作为数字?

2个回答

13

参考自此帖子:在read.table / read.csv的colClasses参数中指定自定义日期格式

#some sample data
write.csv(data.frame(a=c("1.234,56", "1.234,56"),
                     b=c("1.234,56", "1.234,56")),
          "test.csv", row.names=FALSE, quote=TRUE)

#define your own numeric class
setClass('myNum')
#define conversion
setAs("character", "myNum",
      function(from) as.numeric(gsub(",", "\\.", gsub("\\.", "", from))))

#read data with custom colClasses
read_data = read.csv("test.csv",
                     stringsAsFactors=FALSE,
                     colClasses=c("myNum", "myNum"))
#let's try whether this is really a numeric
read_data[1, 1] * 2

#[1] 2469.12

2

不要试图在加载时完全修复它,我会将数据作为字符串加载到 R 中,然后将其转换为数字进行处理。

因此,在加载后,它是一列字符串,例如“4.123,98”

然后可以执行以下操作:

 number.string <- gsub("\\.", "", number.string)
 number.string <- gsub(",", "\\.", number.string)
 number <- as.numeric(number.string)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接