0

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

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

我想知道为什么会发生这种情况以及如何解决它的想法。

谢谢。

4

2 回答 2

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])
}
于 2013-02-18T13:18:23.513 回答
1

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

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

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

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

于 2013-02-18T13:07:19.283 回答