我有一个非常大的数据集,我必须使用它作为一个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因此,我尝试了以下操作,这引发了以下错误:
>frame.ffdf$start <- ff(within(frame.ffdf,
na.locf(start)))
Error in ff(within(frame.ffdf, na.locf(start))) :
initdata[1] must be atomic我发现了关于用另一个集合值替换this值的NA问题,但是没有能够使用na.locf()类型函数找到一个。我知道我可以通过一个for循环来完成这个任务,但是由于数据集的大小,这会花费很长的时间。
发布于 2015-07-23 14:46:09
我对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所以是的,我不知道为什么会起作用,但是如果你用列运算符而不是$运算符,你应该没问题。
https://stackoverflow.com/questions/31589430
复制相似问题