2011-09-07 87 views
8

我试图读入R一个包含政治捐款信息的csv文件。据我所知,默认情况下的列是作为因子导入的,但我需要将数据列(数据集中的'CTRIB_AMT')作为数字列导入,以便我可以运行各种不起作用的函数因素。该列被格式化为以“$”作为前缀的货币。在货币列中读取R中的csv文件作为数字

我用一个简单的读命令导入最初的文件:

contribs <- read.csv('path/to/file') 

,然后试图向CTRIB_AMT从货币转换为数字:

as.numeric(as.character(sub("$","",contribs$CTRIB_AMT, fixed=TRUE))) 

但没有奏效。我试图使用的CTRIB_AMT列的功能有:

vals<-sort(unique(dfr$CTRIB_AMT)) 
sums<-tapply(dfr$CTRIB_AMT, dfr$CTRIB_AMT, sum) 
counts<-tapply(dfr$CTRIB_AMT, dfr$CTRIB_AMT, length) 

参阅相关的问题here

有关如何最初导入文件的任何想法列是数字或如何将其转换后导入?

+1

文件内容的一个小例子会很有帮助。 –

+0

'sub' - >'as.character' - >'as.numeric'转换应该有效。 “没有工作”是什么意思? –

+1

适合我。 'CTRIB_AMT < - factor(c(“$ 5000”,“$ 2500”,“$ 100”)); (as.numeric)(as.character(sub(“$”,“”,CTRIB_AMT,fixed = TRUE)))' –

回答

14

我不知道如何在直接读取它,但你可以修改它曾经在:

> A <- read.csv("~/Desktop/data.csv") 
> A 
    id desc price 
1 0 apple $1.00 
2 1 banana $2.25 
3 2 grapes $1.97 
> A$price <- as.numeric(sub("\\$","", A$price)) 
> A 
    id desc price 
1 0 apple 1.00 
2 1 banana 2.25 
3 2 grapes 1.97 
> str(A) 
'data.frame': 3 obs. of 3 variables: 
$ id : int 0 1 2 
$ desc : Factor w/ 3 levels "apple","banana",..: 1 2 3 
$ price: num 1 2.25 1.97 

我认为这可能只是在你的子失踪逃跑。 $表示正则表达式中一行的结尾。 \ $是美元符号。但那么你必须逃脱逃生...

+0

我最初以为还有一个失踪的逃跑,但'fixed = TRUE'照顾.. –

+0

也许tchaymore忘了做任务? – Zach

+8

+1 我还发现''gsub(“[$,]”,“”,'...对像'1,234'''这样的数字很有用。 –

2

或者使用类似as.numeric(substr(as.character(contribs$CTRIB_AMT),2,20))的东西,我们知道肯定不会超过20个字符。

另外一点需要注意的是,你可以删除需要从要素转换产品总数,如果你设置stringsAsFactors=F在调用read.csv()

4

然而,对于一个问题的另一个解决方案就解决这个问题很长一段时间:

convertCurrency <- function(currency) { 
    currency1 <- sub('$','',as.character(currency),fixed=TRUE) 
    currency2 <- as.numeric(gsub('\\,','',as.character(currency1))) 
    currency2 
} 

contribs$CTRIB_AMT_NUM <- convertCurrency(contribs$CTRIB_AMT)