read.csv2.ffdf正在导入一个数字(浮点)变量作为因子

时间:2013-02-18 11:30:12

标签: r bigdata

我有几周的时间使用ff包,到目前为止它一直很好用, 但是今天我意识到一个应该是数字的变量被作为一个因素被引用。 数据有大约900k行和800 col,所以控制每列都得到它应该的类是不容易的......

matff <- read.csv2.ffdf(file = name,encoding = "UTF-8",next.rows=150000,colClasses=NA)

我想知道为什么会发生这种情况以及如何解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:1)

您的数据有一些列是明确的文本,而不是您期望的数字数据。

您可以使用trans.cUN参数read.csv2.ffdf来解决小数问题。如在

transFUN=function(x){
  x$mycolumn <- as.numeric(gsub(",", ".", as.character(x$mycolumn)))
  x
}

或使用适当的read.table参数。

答案 1 :(得分:1)

现在应该有效:

# matff <- data.frame(Col=c('a','b','c'),Mix1=c('a','1.2','c'),Mix2=c(1.1,2.1,3),Num1=c('1.2','2.3','3.4'),Num2=c('1,2','2,3','3,4')) # Data example

func <- function(x) {
 if (class(x) != 'numeric') {
  x <- levels(x)[x]
  if (length(grep('[a-zA-Z]',x,invert=T)) == length(x)) { x <- as.real(gsub(',','\\.',x)) }
  else { x <- factor(x) }
 }
 x
}

for (i in 1:ncol(matff)) {
 matff[,i] <- func(matff[,i])
}