如何计算一个变量在另一个变量的级别之间共享的出现次数 [英] How to count the number of occurrences of one variable that are shared between levels of another variable
问题描述
我有类似的数据
id camera
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam03
angelina cam22
barry cam03
barry cam03
barry cam03
barry cam03
barry cam03
barry cam03
barry cam03
barry cam03
barry cam03
barry cam03
barry cam22
barry cam22
barry cam22
barry cam22
barry cam22
barry cam15
barry cam25
所以每个人都被记录在每个拍摄它的相机中,我想知道在每对相机中看到了多少个人,因此对于相机 1 和 2,在示例中,两者都记录了多少个人上面,在摄像机 1 和 2 中只看到个体 A,对于摄像机 1 和 3,个体 B 和 E 在它们中都可见,所以我想要的结果是像
So each individual is recorded in each camera that it is captured in, I want to know how many individuals are seen in each pair of cameras, therefore for cameraa 1 and 2, how many indivduals are recorded in both, in the example above, only individual A is seen in both cameras 1 and 2, for cameras 1 and 3, individual B and E is seen in them both, so the desired result I would like would be a table like
0001 0002 0003
0001 - 1 2
0002 1 - 0
0003 2 0 -
如果有人可以在 R 中向我展示此代码,我将不胜感激
I would greatly appreciate it if someone could show me the code for this please in R
推荐答案
crossprod
应该这样做:
crossprod(table(mydf))
# Camera
# Camera 0001 0002 0003
# 0001 4 1 2
# 0002 1 1 0
# 0003 2 0 3
如果需要,
diag
可用于将对角线设置为零或 NA
.您可以一次性完成所有操作:
diag
can be used to set the diagonal to zero or NA
if required. You can do it all in one go with:
`diag<-`(crossprod(table(mydf)), 0)
# Camera
# Camera 0001 0002 0003
# 0001 0 1 2
# 0002 1 0 0
# 0003 2 0 0
示例数据:
mydf <- data.frame(
Individual = c("A", "A", "B", "B", "C", "D", "E", "E"),
Camera = c("0001", "0002", "0001", "0003", "0001", "0003", "0001", "0003"))
如果同一个人有重复的相机,您可以在 crossprod
调用之前消除重复项:
In case of duplicated cameras for same individual, you can eliminate the duplicates prior to the crossprod
call:
`diag<-`(crossprod(table(unique(mydf2))), 0)
camera
#camera cam03 cam15 cam22 cam25
#cam03 0 1 2 1
#cam15 1 0 1 1
#cam22 2 1 0 1
#cam25 1 1 1 0
第二个数据:
mydf2 <- structure(list(id = c("angelina", "angelina", "angelina", "angelina",
"angelina", "angelina", "angelina", "angelina", "angelina", "angelina",
"angelina", "angelina", "barry", "barry", "barry", "barry", "barry",
"barry", "barry", "barry", "barry", "barry", "barry", "barry",
"barry", "barry", "barry", "barry", "barry"), camera = c("cam03",
"cam03", "cam03", "cam03", "cam03", "cam03", "cam03", "cam03",
"cam03", "cam03", "cam03", "cam22", "cam03", "cam03", "cam03",
"cam03", "cam03", "cam03", "cam03", "cam03", "cam03", "cam03",
"cam22", "cam22", "cam22", "cam22", "cam22", "cam15", "cam25"
)), .Names = c("id", "camera"), class = "data.frame", row.names = c(NA,
-29L))
这篇关于如何计算一个变量在另一个变量的级别之间共享的出现次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!