процент наблюдений, которые удовлетворяют двум условиям в двух разных столбцах (в r) - PullRequest
1 голос
/ 27 июня 2019

У меня есть отличная база данных, столбцы которой обозначают наличие видов и наличие проектов добычи (присутствие = 1, присутствие = 0), а строки - это географические местоположения (пиксели).Я хочу получить процент пикселей, когда specie1 = 1 и майнинг-проект = 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

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Здесь вы можете использовать функцию *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

Создано в 2019-06-27 пакетом Представить (v0.3,0)

0 голосов
/ 27 июня 2019

Опция использует 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...