读取R中的csv文件,将货币列作为数字

tch*_*ore 11 symbols currency r read.csv

我正在尝试阅读R a csv文件,其中包含有关政治捐款的信息.根据我的理解,默认情况下将列导入为因子,但我需要将amount列(数据集中的"CTRIB_AMT")导入为数字列,以便我可以运行各种不适用的函数因素.该列的格式为货币,前缀为"$".

我使用了一个简单的read命令来最初导入文件:

contribs <- read.csv('path/to/file')
Run Code Online (Sandbox Code Playgroud)

然后尝试将CTRIB_AMT从货币转换为数字:

as.numeric(as.character(sub("$","",contribs$CTRIB_AMT, fixed=TRUE)))
Run Code Online (Sandbox Code Playgroud)

但那没用.我试图用于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)
Run Code Online (Sandbox Code Playgroud)

在此查看相关问题.

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

Zac*_*ach 18

我不确定如何直接阅读它,但你可以修改它:

> 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
Run Code Online (Sandbox Code Playgroud)

我认为它可能只是你的潜艇中失踪的逃脱.$表示正则表达式中行的结尾.\ $是一个美元符号.但是你必须逃脱逃脱......

  • +1我还发现`gsub("[$,]","",`...对于像"$ 1,234"这样的数字很有用. (10认同)
  • 这不应该是公认的解决方案; 它不如在读取时在读取时进行替换的其他解决方案,返回数字,从而避免创建大量不必要的和唯一的字符串,这可能会浪费大型文件上的Mb/Gb,也会变慢. (3认同)

Mar*_*rek 13

另一种方法是使用设置转换setAs.
它用于两个(类似)问题:

满足您的需求:

setClass("Currency")
setAs("character", "Currency",
    function(from) as.numeric(sub("$","",from, fixed=TRUE)))

contribs <- read.csv("path/to/file", colClasses=c(CTRIB_AMT="Currency"))
Run Code Online (Sandbox Code Playgroud)


Ant*_*n K 5

很久以前解决问题的又一个解决方案:

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)
Run Code Online (Sandbox Code Playgroud)