如何将函数或逻辑测试应用于ffdf?

时间:2014-08-19 09:59:20

标签: r ff

这基本上是在询问如何将之前的问题应用到ffdf:R - applying ifelse to a whole data frame

我基本上都在尝试做同样的事情。给定ffdf数据帧,我基本上是在询问如何将ifelse应用于整个数据帧。请参阅两个用于测试的示例(数据框)。我正在尝试对test.ffdf做同样的事情。我已经尝试使用Google搜索q并且人们建议要获得ffdf的正常df部分,请使用physical()。 例如:How to use apply or sapply or lapply with ffdf?我可以用它来查看数据,但似乎没有返回可操作的向量。

test<-data.frame(year=c("1990","1991","","1993"),value=c(50,25,20,5), type=c('puppies', '', 'hello', 'party'))

test.ffdf = as.ffdf(test)

lapply(test, function(x) type.convert(as.character(x), na.strings = ""))
test[test==''] = NA

lapply(physical(test.ffdf), function(x) type.convert(as.character(x), na.strings = ""))
physical(test.ffdf)[physical(test.ffdf)=='']

同样,我可以执行像

这样的逻辑测试
test.ffdf$value > 20

但我似乎无法找到将它应用于整个ffdf的方法,就像你可以用df一样。

1 个答案:

答案 0 :(得分:1)

 test.ffdf[,1:3][test.ffdf[,1:3]==''] <- NA

  physical(test.ffdf)
 #$year
 #ff (open) integer length=4 (4) levels:  1990 1991 1993
 # [1]  [2]  [3]  [4] 
 #1990 1991 NA   1993 

 #$value
 #ff (open) double length=4 (4)
 #[1] [2] [3] [4] 
 #50  25  20   5 

 #$type
 #ff (open) integer length=4 (4) levels:  hello party puppies
 #  [1]     [2]     [3]     [4] 
 #  puppies NA      hello   party   

library(ffbase)
test.ffdf <- droplevels(test.ffdf)

str(test.ffdf[,names(test.ffdf)])
# 'data.frame': 4 obs. of  3 variables:
#  $ year : Factor w/ 3 levels "1990","1991",..: 1 2 NA 3
#  $ value: num  50 25 20 5
#  $ type : Factor w/ 3 levels "hello","party",..: 3 NA 1 2