我有一个很棒的数据库,其中列是物种存在和采矿项目存在(存在= 1,存在= 0),行是地理分布位置(像素)。 我想获得关于specie1 = 1的specie1 = 1和挖矿项目= 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
答案 0 :(得分:0)
一个选项正在使用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
答案 1 :(得分:0)
您可以在此处使用*apply()
函数,例如sapply()
:
x <-
data.frame(
"dog" = c(1, 1, 0, 0, 1, 1),
"bird" = c(1, 1, 0, 0, 0, 0),
"cat" = c(1, 0, 0, 0, 1, 1),
"trap" = c(1, 1, 0, 1, 0, 1)
)
sapply(x[, 1:(ncol(x)-1)], function(i) sum(i == 1 & x$trap == 1) / sum(i == 1))
#> dog bird cat
#> 0.7500000 1.0000000 0.6666667
由reprex package(v0.3.0)于2019-06-27创建