2017-10-08 5 views
-2

以下のようなデータフレームがあります。同様の値を持つセルを1つの行にまとめる

New_ment1_1 New_ment1_2  New_ment1_3   New_ment1_4 
1 application  android   ios      NA 
2 donald trump agreement  climate    united states 
3 donald trump agreement  paris    united states 
4 donald trump agreement united states    NA 
5 donald trump  climate  emission    united states 
6 donald trump entertainer  host     president 
7 hen    chicken  mustard     wimp 
8 husband   pamela  private lives    NA 
9 pan    chicken   hen      wimp 
10 sex   associate  pamela     partner 
11 united kingdom chicken   hen      wimp 
12 united states agreement  paris      NA 

そして私は、例えば

以下のような行を持つデータフレームとして結果をしたい、それがどんな同様の行を持っていないので、 行1のようなする必要があります。

あなたが行2,3,4,5および12を見れば彼らは

united states donald trump paris climate agreement emission 

と行7,9および11のように同じ行に結合されるべきでは

united kingdom chicken hen wimp mustard 
と組み合わせる必要があります

任意の順序で指定できます。

+0

「類似」の意味がわからないまた、これまでに何を試しましたか? – useR

+0

のように、4ワードの行に2つの同じワードが2つの行にある場合、それらを結合したいと思います。 –

答えて

0

最後の注記にデータフレームDFが再現可能に表示されているものとします。

これを文字マトリックスmに変換します。複数の要素が共通している場合は2つの行が似ており、2つの行インデックスをとり、それに応じてTRUEまたはFALSEを返すようにis_similarを定義するとします。その後、outerを使用して、すべての行のペアに適用します。それをグラフの隣接行列として解釈し、DFを、連結成分を構成するDFの行のデータフレームであるリストLのリストにそれぞれ分割します。最後にLを文字行列に再編集します。

library(igraph) 

m <- as.matrix(DF) 
n <- nrow(m) 
is_similar <- function(i, j) length(intersect(na.omit(m[i, ]), na.omit(m[j, ]))) > 1 
smat <- outer(1:n, 1:n, Vectorize(is_similar)) 

adj <- graph.adjacency(smat) 
cl <- components(adj)$membership 

str(split(1:n, cl)) 
## List of 6 
## $ 1: int 1 
## $ 2: int [1:5] 2 3 4 5 12 
## $ 3: int 6 
## $ 4: int [1:3] 7 9 11 
## $ 5: int 8 
## $ 6: int 10 

spl <- split(DF, cl) 
L <- lapply(spl, function(x) na.omit(unique(unlist(x)))) 
t(do.call("cbind", lapply(L, ts))) 

与える:

[,1]   [,2]   [,3]    [,4]  [,5]  [,6]  
1 "application" "android"  "ios"   NA   NA  NA   
2 "donald_trump" "united_states" "agreement"  "climate" "paris" "emission" 
3 "donald_trump" "entertainer" "host"   "president" NA  NA   
4 "hen"   "pan"   "united_kingdom" "chicken" "mustard" "wimp"  
5 "husband"  "pamela"  "private_lives" NA   NA  NA   
6 "sex"   "associate"  "pamela"   "partner" NA  NA  

注:を再現可能な形で入力される:

Lines <- " 
New_ment1_1 New_ment1_2  New_ment1_3   New_ment1_4 
1 application  android   ios      NA 
2 donald_trump agreement  climate    united_states 
3 donald_trump agreement  paris    united_states 
4 donald_trump agreement united_states    NA 
5 donald_trump  climate  emission    united_states 
6 donald_trump entertainer  host     president 
7 hen    chicken  mustard     wimp 
8 husband   pamela  private_lives    NA 
9 pan    chicken   hen      wimp 
10 sex   associate  pamela     partner 
11 united_kingdom chicken   hen      wimp 
12 united_states agreement  paris      NA" 

DF <- read.table(text = Lines, header = TRUE, as.is = TRUE) 

更新:固定類似度の定義は。

関連する問題