用于FFDF的na.locf()

时间:2015-07-23 13:52:06

标签: r

我有一个非常大的数据集,我必须将其用作'\n',并且我试图使用最后一次观察结转操作来填充ffdf值。下面是我试图执行操作的数据示例:

NA

使用常规数据框,这是一个使用require("zoo") require("ff") ID <- c(1:21) start <- c(11288475000, NA, NA, NA, NA, NA, NA, 11299487500, NA, NA, NA, NA, NA, NA, 12398646000, NA, NA, NA, NA, NA, NA)) frame <- data.frame(ID, start) frame.ffdf <- as.ffdf(frame) 包的简单操作:

zoo

然而,frame$start <- na.locf(frame$start)

同样不起作用
ffdf

我尝试使用>frame.ffdf$start <- na.locf(frame.ffdf$start) Error in which(L) : argument to 'which' is not logical ,因为这通常可以解决我在使用within()时遇到的任何问题,但它会抛出错误:

ffdf

所以我尝试了下面这个,它引发了以下错误:

>frame.ffdf$start <- within(frame.ffdf,
                            na.locf(start))
Error in `[[<-.ffdf`(`*tmp*`, i, value = list(virtual = list(VirtualVmode = c("integer",  : 
  assigned value must be ff

我发现this有关将>frame.ffdf$start <- ff(within(frame.ffdf, na.locf(start))) Error in ff(within(frame.ffdf, na.locf(start))) : initdata[1] must be atomic 值替换为另一个设定值的问题,但我们无法使用NA类型函数找到一个值。我知道我可以使用na.locf()循环完成此操作,但由于我的数据集的大小,它将花费太长时间。

1 个答案:

答案 0 :(得分:0)

我对ffdf一无所知,但似乎$data.frame的工作方式完全不同,但列操作符的确如此:

library(ff)#you should include this in your example, I had to google the library
library(zoo)
na.locf(frame$start)#this works
na.locf(frame.ffdf$start)#this doesn't
na.locf(frame.ffdf[,2])#this does (why?)
na.locf(frame.ffdf[,'start'])#this does (why?)
frame.ffdf[,2] = na.locf(frame.ffdf[,2])#whatever, take what you can get

所以是的,我不确定它为什么会起作用,但是如果你使用列操作符而不是$运算符,你应该没问题。