0

これは、データフレーム列でイベントの組み合わせが発生する回数のカウントで尋ねられた質問の拡張です。質問をもう一度言い換えて、すべてここにあります。

データフレームがあり、2つの列のイベントの各組み合わせが(任意の順序で)発生する回数を計算したいのですが、組み合わせが表示されない場合はゼロになります。

たとえば、私が持っていると言う

df <- data.frame('x' = c('a', 'b', 'c', 'c', 'c'), 
                 'y' = c('c', 'c', 'a', 'a', 'b'))

それで

x y  
a c  
b c  
c a  
c a  
c a  
c b

a一緒に発生しbないでac4回(行2、4、5、6)bc2回(3行目と7行目)なので、戻りたいと思います

x-y num  
a-b 0  
a-c 4  
b-c 2  

これが理にかなっているといいのですが?前もって感謝します

4

3 に答える 3

4

これはそれを行う必要があります:

res = table(df)

データフレームに変換するには:

resdf = as.data.frame(res)

resdfdata.frameは次のようになります。

  x y Freq
1 a a    0
2 b a    0
3 c a    2
4 a b    0
5 b b    0
6 c b    1
7 a c    1
8 b c    1
9 c c    0

この回答は順序を考慮に入れていることに注意してください。列の順序が重要でない場合は、プロセスの前に元のdata.frameを変更すると、順序の影響がなくなります(acはcaと同じように扱われます)。

df1 = as.data.frame(t(apply(df,1,sort)))
于 2013-03-18T11:39:56.730 に答える
1

述べたように、あなたはこれをfactor()とで行うことができますexpand.grid()(またはすべての可能な組み合わせを取得する別の方法)

all.possible <- expand.grid(c('a','b','c'), c('a','b','c'))
all.possible <- all.possible[all.possible[, 1] != all.possible[, 2], ]
all.possible <- unique(apply(all.possible, 1, function(x) paste(sort(x), collapse='-')))

df <- data.frame('x' = c('a', 'b', 'c', 'c', 'c'), 
                 'y' = c('c', 'c', 'a', 'a', 'b'))
table(factor(apply(df , 1, function(x) paste(sort(x), collapse='-')), levels=all.possible))
于 2013-03-18T11:43:42.260 に答える
0

私は少し退屈だったので、別の方法。おそらくもう少し一般化されていますか?しかし、おそらくそれはそれができるよりもまだ醜いです...

df2 <- as.data.frame(table(df))
df2$com <- apply(df2[,1:2],1,function(x) if(x[1] != x[2]) paste(sort(x),collapse='-'))
df2 <- df2[df2$com != "NULL",]
ddply(df2, .(unlist(com)), summarise, 
      num = sum(Freq))
于 2013-03-18T12:19:59.690 に答える