0

这基本上是在询问如何将先前的问题应用于 ffdf:R - 将 ifelse 应用于整个数据框

我基本上是在尝试做同样的事情。给定一个 ffdf 数据框,我基本上是在问如何将 ifelse 应用于整个数据框。请参阅适用于测试的两个示例(数据框)。我正在尝试对 test.ffdf 做同样的事情。我试过用谷歌搜索 q,人们建议要获得 ffdf 的正常 df 部分,请使用物理()。例如:如何将 apply 或 sapply 或 lapply 与 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 一样。

4

1 回答 1

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
于 2014-08-19T10:07:59.463 回答