当一些数字包含逗号作为千位分隔符时如何读取数据?
我有一个csv文件,其中一些数值用逗号表示为千位分隔符,例如"1,513"
而不是1513
。 将数据读入R的最简单方法是什么?
我可以使用read.csv(..., colClasses="character")
,但是在将这些列转换为数字之前,我必须从相关元素中read.csv(..., colClasses="character")
逗号,并且我找不到完成该操作的方法。
不知道如何让read.csv
正确解释它,但可以使用gsub
将","
替换为""
,然后使用as.numeric
将该字符串转换为numeric
:
y <- c("1,200","20,000","100","12,111")
as.numeric(gsub(",", "", y))
# [1] 1200 20000 100 12111
这也在R-Help(以及第二季度)中得到了答复。
或者,您可以预先处理该文件,例如使用unix中的sed
。
你可以让read.table或read.csv为你做半自动的转换。 首先创建一个新的类定义,然后创建一个转换函数,并使用setAs函数将其设置为“as”方法,如下所示:
setClass("num.with.commas")
setAs("character", "num.with.commas",
function(from) as.numeric(gsub(",", "", from) ) )
然后运行read.csv,如下所示:
DF <- read.csv('your.file.here',
colClasses=c('num.with.commas','factor','character','numeric','num.with.commas'))
我想使用R而不是预处理数据,因为数据修改时它更容易。 按照Shane提出的使用gsub
的建议,我认为这与我所能做的一样简洁:
x <- read.csv("file.csv",header=TRUE,colClasses="character")
col2cvt <- 15:41
x[,col2cvt] <- lapply(x[,col2cvt],function(x){as.numeric(gsub(",", "", x))})
链接地址: http://www.djcxy.com/p/60619.html
上一篇: How to read data when some numbers contain commas as thousand separator?
下一篇: Why isn't express