R: 列表1中有多少元素在列表2中/出现次数

  • 本文关键字:列表 元素 多少 r list compare
  • 更新时间 :
  • 英文 :


我想比较两个列表(数据帧的两行),并计算两个列表之间的差异。

例如:

list1=a,b,c,a
list2=a,a,d,d

列表1的两个元素在列表2中

我可以通过循环和求和来做到这一点,但效率很低。在R中有这样的函数吗?

我已经检查了setdiff和compare包,但没有发现任何有用的东西。

谢谢你的想法,

Vincent

我的功能看起来像:

        NRebalancing=function(NamePresent)
        {
          Nbexchange=NamePresent[,2]
          Nbexchange=NamePresent[1,2]=0
          for (i in 2:nrow(NamePresent))
          {
            print(i)
            compteur=0
            NameNeeded=NamePresent[i,]
            NameNeeded=unique(NameNeeded)
            NameNeeded=na.omit(NameNeeded)
            for(j in 2:length(NameNeeded))
              #j=1 correspond a une date
            {
              compteur = compteur+(abs(sum(NamePresent[i,]==as.character(NameNeeded[j]))-sum(NamePresent[i-1,]==as.character(NameNeeded[j]))))
            }
          Nbexchange[i]=compteur  
          }
          return(Nbexchange)
        }

一个要点:您的列表不是R列表,这有点特别。您正在使用矢量:

R> is.vector(l1)
[1] TRUE
R> is.list(l1)
[1] FALSE

如果变量是向量,则不要调用它们list1


既然你有一个向量,就有很多可能性。

  1. %in%操作员

    R> l1 = c("a", "b", "c", "d")
    R> l2 = c("a", "a", "d", "d")
    R> l1[l1 %in% l2]
     [1] "a" "d"
    
  2. 或使用is.element

    R> l1[is.element(l1, l2)]
     [1] "a" "d"
    
  3. 还有unique:

    R> unique(l2)
     [1] "a" "d"
    

    根据您对@mrdwab的评论,您可以使用sapplyunique 的组合来计算发生次数

    sapply(unique(l1), function(i) sum(i==l2))
    

    i==l2检查成员资格,sum计算TRUE出现的次数,sapply基本上只是unique(l1) 上的for循环

    R> sapply(unique(l1), function(i) sum(i==l2))
    a b c d 
    2 0 0 2
    
  4. @mrdwab的一个非常好的建议是使用tablecolSums:

    R> table(l1, l2)
      l2 l1  
       a d
     a 1 0
     b 1 0
     c 0 1
     d 0 1
    R> colSums(table(l1, l2))
     a d 
     2 2 
    

你试过这样的东西吗?

list1 = c("a", "b", "c", "a")
list2 = c("a", "a", "d", "d")
list2 %in% list1
# [1]  TRUE  TRUE FALSE FALSE

更新

既然你在寻找频率,我也认为考虑table是很自然的。

总的来说,我觉得问题有些令人困惑。您的问题指出,您正在查找一个列表(list2)中出现在另一个列表中(list1)的次数,但在接受的答案中(在我的coSums(table...示例中,您也在计算dlist1中没有出现。因此,我提供了最后一个使用table%in%的示例,它与您的问题相匹配,但可能不是您想要的。这里是:

table(list2[which(list2 %in% list1)])
# a 
# 2

相关内容

  • 没有找到相关文章

最新更新