计算每列值 >0 的行数(在 R 中)

Count rows which have value >0 for each column (in R)

我有一个大矩阵 (ma) 我想计算每列有多少行的值 >0。

ma
   x    y  
a  0    3
b  0    0.1
c  2    2
d  0.3  1

结果

   x    y  
a  2    4

base R 试试这个解决方案。矩阵的一个特点是它们可以很容易地被索引,这样你就可以像你的问题一样在行或列级别应用函数。这里的代码:

#Code
colSums(ma>0)

输出:

colSums(ma>0)
x y 
2 4 

使用了一些数据:

#Data
ma <- structure(c(0, 0, 2, 0.3, 3, 0.1, 2, 1), .Dim = c(4L, 2L), .Dimnames = list(
    c("a", "b", "c", "d"), c("x", "y")))

您也可以这样保存输出:

#Save
res <- colSums(ma>0)

我们可以使用 base R

中的 apply
apply(ma >0, 2, sum)

sapply

sapply(ma, function(x) sum(x > 0))

或者 tidyverse

的选项
library(dplyr)
ma %>%
    summarise(across(everything(), ~ sum(. > 0)))

使用data.table你可以试试

library(data.table)
set.DT(ma)
ma[,lapply(.SD, function(x) sum(x>0))]
result<-apply(df >0, 2, sum)