首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFDF的na.locf()

FFDF的na.locf()
EN

Stack Overflow用户
提问于 2015-07-23 13:52:06
回答 1查看 257关注 0票数 1

我有一个非常大的数据集,我必须使用它作为一个ffdf,并且被困在使用最后一个观察转发操作来填充NA值的过程中。下面是我试图对以下数据进行操作的示例:

代码语言:javascript
复制
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包可以轻松地操作:

代码语言:javascript
复制
frame$start <- na.locf(frame$start)

但是,同样的情况在ffdf上是行不通的。

代码语言:javascript
复制
>frame.ffdf$start <- na.locf(frame.ffdf$start)
Error in which(L) : argument to 'which' is not logical

我尝试使用within(),因为这通常解决我在使用ffdf时遇到的任何问题,但它会引发错误:

代码语言:javascript
复制
>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

因此,我尝试了以下操作,这引发了以下错误:

代码语言:javascript
复制
>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循环来完成这个任务,但是由于数据集的大小,这会花费很长的时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-23 14:46:09

我对ffdf一无所知,但$的工作方式似乎与data.frame不完全一样,但列运算符是这样做的:

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31589430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档