从R中的表中提取

时间:2015-08-04 15:30:20

标签: r

我有一个问题应该很难但我不能按照我想要的方式得到它。我的df有大约200行和近4200列。唯一存在的是df中的0,1和2。 类似的东西:

    Col1 Col2 Col3 ...
Row1  2    1   0
Row2  1    1   1
Row3  2    2   2
.
.

我现在想保存每个coloumn中2号apper的次数,所以我写了

freq<-sapply(df,table)

但这里是我被卡住的地方。我想保存每个coloumn中有多少2:s并保存在一个ny df中并跟踪哪个coloumn有那么多2:s。

希望它看起来像这样(如果在上面的例子中完成):

Col1 Col2 Col3
  2    1    1

很抱歉,我现在解释得有点不好。请告诉我是否应该添加一些东西,以便更容易解决我的问题。

2 个答案:

答案 0 :(得分:2)

您可以尝试colSums

 colSums(df==2)
 #Col1 Col2 Col3 
 # 2    1    1 

我们创建一个逻辑矩阵(df==2),然后按sum

获取每列的colSums

对于大数据集,循环可能更好,因为df==2的大矩阵可能导致内存问题

  vapply(df, function(x) sum(x==2), numeric(1))

数据

 df <- structure(list(Col1 = c(2L, 1L, 2L), Col2 = c(1L, 1L, 2L),
 Col3 = 0:2), .Names = c("Col1", 
 "Col2", "Col3"), class = "data.frame", row.names = c("Row1", 
 "Row2", "Row3"))

答案 1 :(得分:1)

基础R中的另一种方法。只需像以前一样使用table函数,然后使用子集来仅获取所需的值(在本例中为2)。

dft <- sapply(df1, table)
lapply(dft, function(x) x[[2]] )
$Col1
[1] 2

$Col2
[1] 1

$Col3
[1] 1