2016-03-23 3 views
0

私は質問をします。あなたがしようとする気かどうかは...、私は以下のベクトルで、これを一致たいその後....私はここにベクトルを持っている...コンマの組み合わせは一致しますが、コンマはどうですか?私は混乱しています

[1] "I1,I2,I5" "I2,I4"  "I2,I3"  
[4] "I1,I2,I4" "I1,I3"  "I2,I3"  
[7] "I1,I3"  "I1,I2,I3,I5" "I1,I2,I3" 


hits <- sapply(1:length(a.new.list), function(j) pmatch(result,a.new.list[j])) 
colnames(hits) <- a.new.list 
rownames(hits) <- result 

apply(hits,1, sum,na.rm=TRUE) 

I1,I2 I1,I3 I1,I4 I1,I5 I2,I3 I2,I4 I2,I5 I3,I4 I3,I5 I4,I5 
4  2  0  0  2  1  0  0  0  0 

[1] "I1,I2" "I1,I3" "I1,I4" "I1,I5" "I2,I3" "I2,I4" 
[7] "I2,I5" "I3,I4" "I3,I5" "I4,I5" 

ありがとう 非常に有用になりますしかし、私が期待したのは結果ではない。組み合わせが1次でない場合、コードは、それが一致していないことを言っ

I1,I2 I1,I3 I1,I4 I1,I5 I2,I3 I2,I4 I2,I5 I3,I4 I3,I5 I4,I5 
4  4  1  2  4  1  2  0  1  0 

... しかし、これは私が必要とするものではありません。

ありがとうございました。誠実に

+0

私がすることができますが、何のため? – ILoveThisName

答えて

1

この方法では、melt.listメソッドをreshape2から使います。文字列splitから2つのデータフレームを作成した後、文字列をマージし、一致するグループの数を確認します。コードは検索ペアに合わせて調整されています。長さは、彼らがlenで変更しなければならない変更の場合:

library(reshape2) 
len <- 2 
dfs <- lapply(list(result, a.new.list), 
       function(x) melt(strsplit(x, ","))) 
m <- merge(dfs[[2]], dfs[[1]], by=1) 
f <- function(n) sum(aggregate(value~L1.y, m[m$L1.x == n,], 
       function(x) length(unique(x)) == len)$value) 
setNames(sapply(1:length(a.new.list), f), a.new.list) 
#I1,I2 I1,I3 I1,I4 I1,I5 I2,I3 I2,I4 I2,I5 I3,I4 I3,I5 I4,I5 
# 4  4  1  2  4  2  2  0  1  0 

データ

a.new.list <- scan(what="character", text='"I1,I2" "I1,I3" "I1,I4" "I1,I5" "I2,I3" "I2,I4" "I2,I5" "I3,I4" "I3,I5" "I4,I5"') 
result <- scan(what="character", text=' "I1,I2,I5" "I2,I4"  "I2,I3"  
"I1,I2,I4" "I1,I3"  "I2,I3"  
       "I1,I3"  "I1,I2,I3,I5" "I1,I2,I3" ') 
関連する問題