在 R 中以千位分隔符加载 csv 的最优雅方式
Most elegant way to load csv with point as thousands separator in R
注意: 据我所知,这个问题不是重复的!我发现的所有 questios/answers 要么是如何从 R 中已有的数据中删除点,要么是如何在加载数据时将小数点更改为逗号。
我有一个包含数字的 csv:4.123,98
。问题在于,由于 .
,当使用 read.table
、read.csv
或 read.csv2
加载时,输出变为字符串矩阵。将 dec
更改为 ,
没有帮助。
我的问题
加载此 csv 的最优雅方式是什么,以便数字变为例如4123.98
作为数字?
与其尝试在加载时修复所有问题,不如将数据作为字符串加载到 R 中,然后将其处理为数字。
所以加载后是一列字符串,如"4.123,98"
然后做类似的事情:
number.string <- gsub("\.", "", number.string)
number.string <- gsub(",", "\.", number.string)
number <- as.numeric(number.string)
改编自此post:Specify custom Date format for colClasses argument in read.table/read.csv
#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
注意: 据我所知,这个问题不是重复的!我发现的所有 questios/answers 要么是如何从 R 中已有的数据中删除点,要么是如何在加载数据时将小数点更改为逗号。
我有一个包含数字的 csv:4.123,98
。问题在于,由于 .
,当使用 read.table
、read.csv
或 read.csv2
加载时,输出变为字符串矩阵。将 dec
更改为 ,
没有帮助。
我的问题
加载此 csv 的最优雅方式是什么,以便数字变为例如4123.98
作为数字?
与其尝试在加载时修复所有问题,不如将数据作为字符串加载到 R 中,然后将其处理为数字。
所以加载后是一列字符串,如"4.123,98"
然后做类似的事情:
number.string <- gsub("\.", "", number.string)
number.string <- gsub(",", "\.", number.string)
number <- as.numeric(number.string)
改编自此post:Specify custom Date format for colClasses argument in read.table/read.csv
#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