计算一对值出现的行数

时间:2017-07-05 01:56:26

标签: r excel dataframe count apply

我的数据框如下所示:

Index   V1  v2  v3  v4  v5  v6

 1      a    b  c   d    e  f

 2      b    c  d   e       
 3      a    b  c   f    g  
 4      a    c  f   d    g  
 5      b    c  d   g    h  i
 .      .    .  .   .    .  .
 .      .    .  .   .    .  .

我需要遍历数据框中的每一行并选取一起显示的对,并对它们进行计数。例如,a和b出现在行索引1和3中,因此count = 2。

数据框有6列,不包括索引和554行。可能的11中每行有6个变量。

第一步是做一对a和b。

然后做所有组合。例如。 a+ca+da+e... b+cb+d...

我使用了table(apply(df,1,function(x) paste(sort(x), collapse='-'))) 和 来自count(df)包的plyr,但输出是a+ba+b+c.... b+cb+c+d的频率。

我需要所有对的频率。所以a+b = (freq of a+b) + (freq of a+b+c) + (freq of a+b+c+d)的频率等等

在excel中,我尝试过COUNTIF。这样COUNTIF(column1,a,column2,b),但a和b分别不在第1列和第2列。

还尝试了COUNTIF(df,a,df,b),但这给了我很多。

可以在r或excel中完成。虽然我认为R会更快。

1 个答案:

答案 0 :(得分:1)

使用示例随机数据, 我们假设数据框在str

将名称=$C$5:$C$558&$D$5:$D$558&$E$5:$E$558&$F$5:$F$558&$G$5:$G$558&$H$5:$H$558 定义为

L5:V5

K6:K16以及=IF(CODE($K7)>CODE(L$5),SUMPRODUCT(1-N(ISERROR(FIND($K7,str))+N(ISERROR(FIND(L$5,str)))>0)),"") 中输入符号。

输入此计算公式

L6
<{1>}中的

并将其复制以填充表L6:V16的其余部分。

enter image description here