gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:34:07 29 4
gpt4 key购买 nike

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

例如:

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/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com