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

标签 r list compare

我想比较两个列表(数据框的两行)并计算两个列表之间有多少差异。

例如:

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

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

我可以用循环和求和来做到这一点,但效率很低。在 R 中是否有任何功能可以做到这一点?

我检查了 setdiff 和 compare 包,但没有找到任何有帮助的东西。

谢谢你的想法,

文森特

我的功能看起来像:
        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如果它们是向量。

因为你有一个向量,所以有很多可能性。
  • %in%运算符(operator)
    R> l1 = c("a", "b", "c", "d")
    R> l2 = c("a", "a", "d", "d")
    R> l1[l1 %in% l2]
     [1] "a" "d"
    
  • 或使用 is.element
    R> l1[is.element(l1, l2)]
     [1] "a" "d"
    
  • 还有unique :
    R> unique(l2)
     [1] "a" "d"
    

    在您对@mrdwab 发表评论之后,您可以使用 sapply 的组合来计算出现次数。和 unique
    sapply(unique(l1), function(i) sum(i==l2))
    
    i==l2检查成员(member)资格,sum计算 TRUE 出现的次数和 sapply基本上只是 unique(l1) 上的 for 循环
    R> sapply(unique(l1), function(i) sum(i==l2))
    a b c d 
    2 0 0 2
    
  • @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 
    
  • 关于R:列表 2 中有多少列表 1 的元素/出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11501127/

    相关文章:

    java - 如何对 map 进行排序

    android - Android SQLite在两个日期之间选择

    r - else {} 语句在 for 循环中被忽略

    r - 两个向量相乘 - 我想要一个标量,但我得到一个向量?

    c - C 语言中比较 2 个字符串的程序

    java - 正则表达式查找单词Java不区分大小写

    python - 如何从文件中获取列表列表以更改为字典

    R:重复 data.frame 的行 k 次并为新行值添加前缀

    R 在 Ubuntu Linux 中从剪贴板复制

    Python 3 : Removing list item with for loop, 这是正确的方法吗?