R - ff包:找到ffdf中最常用的元素并删除所在的行

时间:2015-05-27 17:50:43

标签: r dataframe ff ffbase

我需要一个建议,找到ffdf中最常用的元素,然后删除所在的行。 我决定尝试使用ff包,因为我正在使用非常大的数据,而使用基数R我的内存不足。

这是一个小例子:

 # create a base R Matrix

 > z<-matrix(c("a", "b", "a", "c", "b", "b", "c", "c", "b", "a"),nrow=5,ncol=2,byrow = TRUE)
 > z


     [,1] [,2]
 [1,] "a"  "b" 
 [2,] "a"  "c" 
 [3,] "b"  "b" 
 [4,] "c"  "c" 
 [5,] "b"  "a" 


 # convert z to ffdf

 > u=as.data.frame(z, stringsAsFactors=TRUE)
 > u=as.ffdf(u)
 > u

  ffdf data
   V1 V2
1  a  b
2  a  c
3  b  b
4  c  c
5  b  a

我正在寻找:

  • 导出ffdf中最常见的元素(在本例中为“b”)
  • 从ffdf中删除“b”所在的所有行

所以,新的ffdf必须如下:

   V1 V2
1  a  c
2  c  c

在基础R中,我找到了“表”功能的方法

  temp <- table(as.vector(z))  
  t1<-names(temp)[temp == max(temp)] 
  z1<- z[rowSums(z== t1[1]) == 0, ]    

但是使用大量数据我需要像ff包这样的东西。

1 个答案:

答案 0 :(得分:1)

var_ptr = mmap(NULL, sizeof(some_type_t), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, 0, 0)

以下内容适用于任何大小的数据集。它使用来自ffbase的table.ff和ffwhich,来自ff的ffrowapply和基于ff整数向量的索引。

require(ff)
z <- matrix(c("a","b","f","c","f","b","e","c","b","e"),nrow=5,ncol=2,byrow = TRUE)
u <- as.data.frame(z, stringsAsFactors=TRUE)
u <- as.ffdf(u)
u