Создать данные частоты взаимодействий между переменными, используя R - PullRequest
0 голосов
/ 03 апреля 2019

Я хотел бы рассчитать таблицу частоты диадических взаимодействий, используя R. Мне нужно посчитать, сколько взаимодействий между животными за каждый месяц, а затем, в общей сложности.Пример данных приведен ниже:

#Create sample data
B1 <-data.frame(Animal = c("A","B","C","D","E","A","B","C","D","E","A","B","C","D","E","A","B","C","D","E","A","B","C","D","E"), Location = c(1,1,2,1,3,4,2,1,1,3,3,4,3,1,1,4,2,2,2,1,1,3,4,3,2), Month = c("Jan","Jan","Jan","Jan","Jan","Feb","Feb","Feb","Feb","Feb","Mar","Mar","Mar","Mar","Mar","Apr","Apr","Apr","Apr","Apr","May","May","May","May","May"))

Используя эти данные, я хочу, чтобы можно было показывать животных, присутствующих в одном месте ежемесячно в парах. Например, ожидаемый результат для пар, использующих эти места, долженв январе выглядит примерно так:

#Sample extract for January
B1Jan <- data.frame(Animal1= c("A", "A","B") ,Animal2=c("B","D","D") )
B1Jan
  Animal1 Animal2
1       A       B
2       A       D
3       B       D

После извлечения для каждого месяца я хочу иметь возможность подсчитать общее количество взаимодействий между каждой парой в целом, например, возможно, взаимодействие AD происходило в общей сложности 3 раза.

Какой лучший способ сделать это, пожалуйста?

1 Ответ

1 голос
/ 03 апреля 2019

Используя data.table, вы, вероятно, можете сделать что-то вроде:

library(data.table)

#convert into data.table
setDT(B1)

#create interaction between animals in the same location & month    
ans <- B1[, if (.N > 1L) transpose(combn(unique(Animal), 2L, simplify=FALSE)), 
    by=.(Location, Month)]

#change column names to desired column names
setnames(ans, paste0("V", 1L:2L), paste0("Animal", 1L:2L))

#sort animals so that A, B and B, A are the same
ans[, paste0("Animal", 1L:2L) := .(pmin(Animal1, Animal2), pmax(Animal1, Animal2))]

#count the number of interactions as requested
ans[, .(NumInteract=.N), by=c(paste0("Animal", 1L:2L))]

output:

   Animal1 Animal2 NumInteract
1:       A       B           1
2:       A       D           1
3:       B       D           3
4:       C       D           2
5:       A       C           1
6:       D       E           1
7:       B       C           1
...