我有以下代码:
T1 <- list(t1, id_list=list(), Values=c())
T2 <- list(t2, id_list=list(), Values=c())
values1 = as.numeric(as.vector(values1))
T1$Values = values1
n.id.list1 = length(sort(unique(values1)))
order.list1 = sort(unique(values1))
for ( i in 1:n.id.list1) {
id1 = order.list1[i]
T1$id_list[[i]] <- which(values1==id1)
}
对于T2来说同样如此:
values2 = as.numeric(as.vector(values2))
T2$Values = values2
n.id.list2 = length(sort(unique(values2)))
order.list2 = sort(unique(values2))
for ( i in 1:n.id.list2) {
id2 = order.list2[i]
T2$id_list[[i]] <- which(values2==id2)
}
a <- length(T1$id_list)
b <- length(T2$id_list)
size_lists<-matrix(0,2,max(a,b))
列表大小:
for (i in 1:a){
size_lists[1,i] <- length(T1$id_list[[i]])
}
for (j in 1:b){
size_lists[2,j] <- length(T2$id_list[[j]])
}
列表之间的匹配数量:
for (i in 1:a) {
for (j in 1:b){
size_matching[i,j] <- length(intersect(T1$id_list[[i]], T2$id_list[[j]])
}
}
最后我计算了列表之间的条件概率:
for (i in 1:a) {
for (j in 1:b) {
if(size_lists[1,i] > 0 & (size_lists[2,j]/size_lists[1,i] > 0.5)) {
match[i,j] <- round((size_matching[i,j]/size_lists[1,i]),digits=2)
} else {
match[i,j] <- 0
}
}
}
我想仅为特定的List Sizes计算这些 match [i,j] ,如上所述,以简化该过程。我的想法是通过缩小尺寸来排序列表,并按大小计算某些 top K 列表的match
,但我无法做到。
我尝试使用values1
对values2
和table
进行排序,但它并没有真正符合我的想法。我还尝试在列表大小(上面的& (size_lists[2,j]/size_lists[1,i] > 0.5)
)之间包含一个比率,但阈值取决于列表。
编辑:
关于MrFlick的评论:
我在两个不同的时间点t1和t2有两个列表L1和L2。在每个时间点,输入给出了这些列表的成员资格(“值”列表),即,对于某些类,它给出了它所在的所属组。
e.g:
color values1(t1) values2(t2)
white 1 2
blue 2 2
red 1 1
orange 2 NA
violet 2 4
brown NA 2
black 1 3
purple 3 3
green 3 2
grey 2 2
yellow 1 NA
gold NA 1
pink 1 1
silver 3 3
darkred 1 3
所需输出是描述t1和t2之间转换的列表。问题是我想根据列表大小限制条件概率的计算(它为每对类计算它们)。例如,在t1中具有较高成员资格的类仅在t2中为大小最高的前5个类运行匹配[i,j]。就像我说的那样,我尝试在列表大小之间使用一些比例,但它确实不起作用。