Вложенные условные операторы на основе критериев из нескольких столбцов и строк - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь создать матрицу совпадений видов. У меня есть фрейм данных bd

species <- c("A","A","F","H","D","E","C","D")
ID <- c("a1", "a2", "f1", "h1", "d1", "e1", "c1", "d2")
loc <- c(1,2,2,1,3,5,2,3)
time <- c("8:00","9:00","9:00","10:00","12:00","12:00","1:00","2:00")
cn <- c(1:8)
data.frame(species, ID, loc, time, cn)

species  ID  loc  time cn
1   A    a1   1   8:00  1
2   A    a2   2   9:00  2
3   F    f1   2   9:00  3
4   B    b1   1  10:00  4
5   D    d1   3  12:00  5
6   E    e1   5  12:00  6
7   C    c1   2   1:00  7
8   D    d2   3   2:00  8

Я хочу создать условные «критерии» для совместной встречаемости, такие как:

если вид [x] найден в +/- 1 месте и в течение 1 часа:

2 вида A | 1 вид A и 1 вид B | 1 разновидность C

затем подсчитайте эти виды как совпадающие и вставьте (разновидности, ID, sep = "."), Если нет, 0.

Мой код выглядит примерно так это:

instance <- as.data.frame(with(b.d, sapply(cn, function(x)
    ifelse(abs(loc- loc[x]) <=1 & abs(difftime(time, time[x], units = "mins")) <= 60 &
        ((b.d$species[x]=="A" & b.d$species[x]=="A")
        | (b.d$species[x]=="A" & b.d$species[x]=="B")
               | b.d$species[x]=="C"), 
           paste(b.d$species,b.d$ID,sep="."),0)))) 

И я хочу получить матрицу с числом столбцов и строк cn (= 8), где каждый столбец содержит виды, которые наблюдались вместе на основе критериев. Итак,

    V1    V2    V3    V4   V5    V6    V7   V8
1  A.a1  A.a1  A.a1   0     0     0    0     0
2  A.a2  A.a2  A.a2  A.a2   0     0    0     0
3  F.f1  F.f1  F.f1  F.f1   0     0    0     0
4  0     B.b1  B.b1  B.b1   0     0    0     0
5  0      0     0     0     0     0    0     0
6  0      0     0     0     0   E.e1  E.e1  E.e1
7  0      0     0     0     0   C.c1  C.c1  C.c1
8  0      0     0     0     0   D.d2  D.d2  D.d2

Приведенный выше код работает для критериев местоположения и времени, но критерии разновидностей [x] как-то перепутаны. Применяется только первый аргумент (разновидность [x] == "A"), а остальные приводят к нулям. Я думаю, что функция sapply считывает разновидность [x] строка за строкой, так что разновидность [x] может представлять только 1 вид за раз. Как мне обойти это, чтобы каждая строка проверялась по нескольким другим строкам? так что вид [x] может представлять комбинацию видов?

Спасибо.

...