2017-10-08 61 views
-2

我有一個如下所示的數據框。在一行中組合具有相似值的單元格

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 

我希望得到的如像下面

例如, ROW1應該是這樣,因爲它不具有任何類似的行具有行的數據幀。

,如果你看行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個單詞中,如果兩行中有兩個相同的單詞,我想合併它們。 –

回答

0

假設數據幀DF在最後的註釋中可重複顯示。

將其轉換爲字符矩陣m。讓我們說,如果兩行共有多個元素,並且定義is_similar以獲取兩行索引並相應地返回TRUE或FALSE,則兩行相似。然後將其應用於使用outer的每一對行。解釋爲一個圖的鄰接矩陣,並計算連接成分將DF劃分成列表L,其每個元素是構成該連接成分的來自DF的行的數據幀。最後將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) 

更新:固定相似的定義。

相關問題