我有一个问题应该很难但我不能按照我想要的方式得到它。我的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
很抱歉,我现在解释得有点不好。请告诉我是否应该添加一些东西,以便更容易解决我的问题。
答案 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