首页 > 解决方案 > 在两个不同的列中满足两个条件的观察百分比(以 r 为单位)

问题描述

我有一个很棒的数据库,其中列是物种存在和采矿项目存在(存在 = 1,ausence = 0),行是地理位置(像素)。我想在specie1 = 1&mining project = 1时获得关于specie1 = 1的像素百分比。我有100多个物种,所以我需要一种循环才能更高效

我试图用for做一个循环,但我不知道什么是“i”。

这是我想做的一个例子

x <- data.frame("dog" = c(1,1,0,0,1,1), "cat" = c(1,0,0,0,1,1), 
+                 "trap" = c(1,1,0,1,0,1))
> x
  dog cat trap
1   1   1    1
2   1   0    1
3   0   0    0
4   0   0    1
5   1   1    0
6   1   1    1
> dog <- sum(x$dog==1 & x$trap==1)/sum(x$dog==1)
> dog
[1] 0.75
> cat <- sum(x$cat==1 & x$trap==1)/sum(x$cat==1)
> cat
[1] 0.6666667

对于我所有的 100 个物种,我想以最少的步骤得到这个答案:

[1] dog  0.75
[2] cat  0.6666

标签: r

解决方案


一个选项正在使用colSums

colSums(x[-3] * x[,3])/colSums(x[-3])
#    dog       cat 
#0.7500000 0.6666667 

或与sapply

sapply(x[1:2], function(y)  sum(y ==1 & x[,3] == 1)/sum(y ==1))
#      dog       cat 
#0.7500000 0.6666667 

推荐阅读