R:列表1中有多少元素在列表2中/发生次数
我想比较两个列表(数据帧的两行)并计算两个列表之间的差异 例如:R:列表1中有多少元素在列表2中/发生次数,r,list,compare,R,List,Compare,我想比较两个列表(数据帧的两行)并计算两个列表之间的差异 例如: list1=a,b,c,a list2=a,a,d,d 列表1的两个元素在列表2中 我可以通过循环和求和来实现这一点,但效率非常低。在R中是否有这样做的功能 我已经检查了setdiff和compare包,但没有找到任何有用的东西 谢谢你的想法 文森特 我的函数如下所示: NRebalancing=function(NamePresent) { Nbexchange=NamePr
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)
}
你试过这样的东西吗
list1 = c("a", "b", "c", "a")
list2 = c("a", "a", "d", "d")
list2 %in% list1
# [1] TRUE TRUE FALSE FALSE
更新
既然你在寻找频率,我也认为考虑<代码>表< /> >是很自然的。
总的来说,我觉得这个问题有些令人困惑。您的问题表明,您正在查找一个列表(list2
)中出现在另一个列表(list1
)中,但在已接受的答案(以及我的coSums)中出现的次数(表…
示例,您也在计算d
,它没有出现在列表1
中。因此,我使用表和%
中的%提供了最后一个示例,它与您的问题相匹配,但可能不是您要查找的。这里是:
table(list2[which(list2 %in% list1)])
# a
# 2
一个要点:您的列表不是R列表-这有点特殊。您使用的是向量:
R> is.vector(l1)
[1] TRUE
R> is.list(l1)
[1] FALSE
如果变量是向量,不要调用变量list1
因为你有一个向量,所以有很多可能性
%
运算符中的%
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"
还有唯一的:
R> unique(l2)
[1] "a" "d"
在您对@mrdwab的评论之后,您可以使用sapply
和unique
sapply(unique(l1), function(i) sum(i==l2))
i==l2
检查成员资格,sum
统计TRUE出现的次数,sapply
基本上只是一个for循环unique(l1)
@mrdwab的一个非常好的建议是使用表
和colSums
:
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”、“a”、“a”)list2%在%list1中,我想得到2@VincentH,TRUE
计为1
和FALSE
计为0
,因此sum(列表1中的列表2%)
会给你2
@VincentH,在你评论中的示例数据中,为什么你不希望得到2
作为答案?a
在list1
中,而a
在list2
中出现4次,那么你为什么不期望4
作为答案呢?很抱歉,我不清楚。事实上,我想数一数list2中的元素在List1中出现了多少次?对名称表示担忧。它是来自数据帧的向量,因此变量类型可能不同…我将编辑问题请记住向量可以有不同的类型:它们可以是字符、数字或逻辑。非常感谢!这就是我要找的。没有时间编辑我的问题:)@csgillespie,+1表示详细信息和不同的选项。我认为table
pluscolSums
也能很好地实现这一点。@mrdwab使用table非常简洁-这不是我经常使用的函数。
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