2016-09-30 7 views
3

一般的な用語に関する情報を含む1と0の行列を作成したいと思います。私は列間に共通項の行列を作成しました(たとえば、1,4,2などの行があります)が、それをどのように分解するのか分かりません。一般的な概念を数え、その結果を行列に格納するにはどうすればよいですか?

ここはおもちゃで再現可能な例です。ステップ(1)〜(4)はOK、ステップ(5)は現時点ではできないことです。

(1)私が持っているこの(架空の)データセット

vec1 <- c("apple","pear","apple and pear") 
vec2 <- c("apple and pear","banana","orange") 
vec3 <- c("orange and pear","banana","apple") 

my.data.frame <- as.data.frame(cbind(vec1,vec2,vec3)) 

      vec1   vec2   vec3 
1   apple apple and pear orange and pear 
2   pear   banana   banana 
3 apple and pear   orange   apple 

(2)私は、変数やコンテンツを抽出

vectors.list <- as.vector(colnames(my.data.frame)) 

list.of.fruits <- unique(as.vector(unlist(my.data.frame))) 

(2)私は、共通の用語をカウントする機能を書き留めます(これは、この記事の変形である:How to count common words and store the result in a matrix?

common.fruits <- function(vList) { 
    v <- lapply(vList, tolower) 
    do.call(rbind, lapply(v, function(x) { 
    do.call(c, lapply(v, function(y) length(intersect(x, y)))) 
    })) 
} 

(4)私が使用して取得し、lapply Sを行うにはOME、効率的な(私は推測)の計算

compare <- lapply(vectors.list,get) 
common.terms.matrix <- common.fruits(compare) 
rownames(common.terms.matrix) <- vectors.list 
colnames(common.terms.matrix) <- vectors.list 
common.terms.matrix 

    vec1 vec2 vec3 
vec1 3 1 1 
vec2 1 3 1 
vec3 1 1 3 

(5)どのように私はこのマトリックスまたはdata.frameにその最後の行列を脱凝集ん(「|」これを手で書かれたことを示すためにある)

 | apple | pear | apple and pear | banana | orange | orange and pear 
vec1 | 1  | 1 | 1    | 0  | 0  | 0 
vec2 | 0  | 0 | 1    | 1  | 1  | 0 
vec3 | 1  | 0 | 0    | 1  | 0  | 1 
+0

唔該おかげでたくさん – pachamaltese

+0

私はOSXで、次の1時間に表示される言語のアイコンを変更することにより、中国語で書くのです:) – pachamaltese

答えて

5

あなたは次にあなたがsortかそこらを使用して出力を注文することができ

table(col(my.data.frame), as.matrix(my.data.frame)) 
     apple apple and pear banana orange orange and pear pear 
    1  1    1  0  0    0 1 
    2  0    1  1  1    0 0 
    3  1    0  1  0    1 0 

を試すことができます。

+0

これは、のようです!多くの列を持つ最速のソリューションです。 as.data.frame.matrix(table(col(my.data.frame)、as.matrix(my.data.frame))を追加することにより、素晴らしい結果が得られます。 – pachamaltese

1

次のような何かを試すことができます。

my.data.frame$id <- 1:nrow(my.data.frame) 
m <- melt(my.data.frame, id='id') 
m$val <- 1 
df <- dcast(m, variable~value, value.var='val') 
df[is.na(df)] <- 0 

df 
    variable apple apple and pear banana orange orange and pear pear 
1  vec1  1    1  0  0    0 1 
2  vec2  0    1  1  1    0 0 
3  vec3  1    0  1  0    1 0 
関連する問題