计算每列值 >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)
我有一个大矩阵 (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)