Я пытаюсь создать матрицу совпадений видов. У меня есть фрейм данных 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] может представлять комбинацию видов?
Спасибо.