【问题标题】:How detect common elements from two lists?如何从两个列表中检测共同元素?
【发布时间】:2017-11-21 14:19:56
【问题描述】:

我有两个列表。我想为它们每一行的每个公共值分配 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
[[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 作为共同值。

我该怎么做?谢谢!

【问题讨论】:

  • 请发布一个可重现的例子。
  • 我修改了代码!现在更容易了!
  • 当您应该发布 dput 的结果时,您仍在发布 head - 不要让其他人手动输入并重新创建您的列表。
  • @Mark,完成了!
  • 也许length(intersect(list1[[1]], list2[[1]])) 就是你要找的东西;如果有共同的元素,这将有一个值> 0

标签: r list


【解决方案1】:

我会使用 ifelse 来完成这项任务

ifelse(v %in% v1,1/4,0)
[1] 0.25 0.25 0.00

【讨论】:

  • 我刚刚重新发明了一个很棒的功能。感谢您的回答
【解决方案2】:
sapply(1:length(list1),function(x){if(sum(list1[[x]] %in% list2[[x]])>0){1/4}else{0} })

给了

[1] 0.25 0.25

只要您的两个列表长度相同,就应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多