代码之家  ›  专栏  ›  技术社区  ›  Lorcan Treanor

将R中ff向量中的NA更改为零

na r
  •  1
  • Lorcan Treanor  · 技术社区  · 12 年前


    我一直在使用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函数,但没有成功。我检查了 ffbase ff pdf什么都没有。我仔细浏览了一下网页,但没有任何帮助 ff(完) 矢量。

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

    2 回复  |  直到 12 年前
        1
  •  1
  •   Roman LuÅ¡trik    12 年前


    再次为你的帮助干杯,谢谢你。一位同事给了我一个建议,用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数据帧。我决定使用16000,而不是0。ffdf[,3]是包含日期的列。这个代码将适用于我在原始问题的示例中给出的日期。希望这能有所帮助,如果这个问题让人们感到困惑,
    干杯
    洛肯

        2
  •  1
  •   A5C1D2H2I1M1N2O1R2T1    12 年前

    在以上示例的基础上进行扩展

    # 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