1


我坚持使用 ff 包。这是一个数据样本。

             col1                col2
90                            
91 21-02-2012 00:00:00 27-02-2009 00:00:00
92 21-02-2012 00:00:00 17-02-2010 00:00:00
93 21-02-2012 00:00:00   
94 21-02-2012 00:00:00                    
95 21-02-2012 00:00:00

计划是将这些日期转换为数字,然后找到日期之间的天数。我坚持的是,当我足够自然地将日期转换为数字时,我得到了一些 NA,这是可以的。我想做的是将 NA 转换为整数 0。这是我尝试过的代码:

tfd<-as.ffdf(tfd) #just to get a sample from my data frame
dats<-as.ff(as.numeric(as.Date(tfd[,1],"%d-%m-%Y")))
dats[is.na(dats)]<-0

我得到错误:

Error in `[<-.ffdf`(`*tmp*`, is.na(dats), value = 0) : 
  value must be ffdf if only one index used

我已经尝试过 na.count 功能,但我没有运气。我检查了ffbaseffpdf,什么也没有。我通过网络很好地查看了所有内容,但对ff矢量没有任何帮助。

如果有人有任何建议,那就太好了。干杯,洛肯

4

2 回答 2

1

扩展上面的例子

# turn data.frame into ffdf
> F <- as.ffdf(Z)

# extract a complete column to RAM
> F[,1]
 [1] "2012-08-02" NA           "2012-08-10" "2012-08-18" "2012-08-01" NA           "2012-08-19" "2012-08-12"
 [9] "2012-08-11" NA

# assign zero to the NAs
> F[is.na(F[,1]),1] <- 0

# check the results
> F[,1]
 [1] "2012-08-02" "1970-01-01" "2012-08-10" "2012-08-18" "2012-08-01" "1970-01-01" "2012-08-19" "2012-08-12"
 [9] "2012-08-11" "1970-01-01"

# you tried to call is.na() directly on an ff object
> is.na(F[[1]])
logical(0)

# compare to 
> is.na(F[,1])
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

# note that all this assumes that the complete column fits into RAM
# if not you need chunking, see ?chunk

> version
               _                            
platform       x86_64-w64-mingw32           
arch           x86_64                       
os             mingw32                      
system         x86_64, mingw32              
status                                      
major          2                            
minor          15.2                         
year           2012                         
month          10                           
day            26                           
svn rev        61015                        
language       R                            
version.string R version 2.15.2 (2012-10-26)
nickname       Trick or Treat
于 2012-11-14T19:51:19.350 回答
1


再次为帮助干杯,你的一切都好。一位同事给了我一个建议,关于在 R 中使用 ifelse 函数来用整数填充之前的空白。我无法用默认日期填充空白,比如说“2006-01-01”,但使用整数效果很好。这是代码:

ffdf1$dates1<-as.ff(ifelse(ffdf1[,3]=="",16000,as.numeric(as.Date(ffdf1[,3],"%d-%m-%Y"))))<br>

ffdf1 是我使用的 ff 数据框。我决定使用 16,000 而不是 0。ffdf[,3] 是包含日期的列。此代码适用于我在原始问题示例中给出的日期。如果这个问题让人们感到困惑,希望这会有所帮助和抱歉,
干杯,
Lorcan

于 2012-08-10T11:32:32.883 回答