R 如何从两个列表中检测公共元素?
我有两张单子。我想为每行的每个公共值赋予1/4属性。 这是一个例子:R 如何从两个列表中检测公共元素?,r,list,R,List,我有两张单子。我想为每行的每个公共值赋予1/4属性。 这是一个例子: v=c(433,405,451) v1=c(405,416,388 ,464,392,393,433) w=c(405,385,384,431) w1=c(405,478,451,430) list1=list(v,v1) list2=list(w,w1) > list1 [[1]] [1] 433 405 451 [[2]] [1] 405 416 388 464 392 393 433 > list2
v=c(433,405,451)
v1=c(405,416,388 ,464,392,393,433)
w=c(405,385,384,431)
w1=c(405,478,451,430)
list1=list(v,v1)
list2=list(w,w1)
> list1
[[1]]
[1] 433 405 451
[[2]]
[1] 405 416 388 464 392 393 433
> list2
[[1]]
[1] 405 385 384 431
[[2]]
[1] 405 478 451 430
事实上,我们在两个列表的第一行和第二行中都看到了405个公共值,然后我们创建了一个向量,如果有公共值,则包含1/4,如果没有,则包含0:
在这种情况下,输出值应如下所示:
1/4
1/4
这是因为list1[1]和list2[1]的公共值为405。
并且list1[2]和list2[1]具有405作为公共值
我该怎么做?谢谢
sapply(1:length(list1),function(x){if(sum(list1[[x]] %in% list2[[x]])>0){1/4}else{0} })
给予
[1] 0.25 0.25
只要您的两个列表长度相同,它就可以工作我将使用ifelse来完成此任务
ifelse(v %in% v1,1/4,0)
[1] 0.25 0.25 0.00
请张贴一个可复制的例子。我修改了代码!现在容易多了!当您应该发布
dput
的结果时,您仍然在发布head
——不要让其他人手动输入并重新创建您的列表。@标记,完成了!也许长度(intersect(list1[[1]],list2[[1]])
就是你要找的;如果有公共元素的话,这将有一个值>0
。谢谢你的回答