我有一个非常大的数据集,我必须将其用作'\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()
循环完成此操作,但由于我的数据集的大小,它将花费太长时间。
答案 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
所以是的,我不确定它为什么会起作用,但是如果你使用列操作符而不是$
运算符,你应该没问题。