I would like to compare two lists (two rows of a data frame) and count how many differences I have between the two lists.
for instance:
list1=a,b,c,a
list2=a,a,d,d
two elements of list 1 are in list 2
I am able to do that with a loop and sum but it is very inefficient. Is there any function to do that in R?
I have checked setdiff and the compare package but did not find anything that helps.
Thanks for your ideas,
Vincent
My function looks like:
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)
}
One main point: your list isn’t an R list – that’s something a bit special. You are using vectors:
don’t call variables
list1if they are vectors.Since you have a vector there are lots of possibilities open.
The
%in%operatorOr use
is.elementThere is also
unique:Following your comment to @mrdwab, you can count the number of occurances using a combination of
sapplyanduniquei==l2checks for membership,sumcounts the number of times TRUE appears andsapplyis basically just a for loop overunique(l1)A very nice suggestion from @mrdwab is to use
tableandcolSums: