2015-02-24 74 views
2

我需要使用自定義函數作爲分組條件從我的數據框創建行組。該函數將比較兩對行,如果這些行應該組合在一起,則返回true/false。基於true/false函數的數據框中的R組行對

在一個實例中的數據集,如:

id field  code1 code2 
1 textField1 055 066 
2 textField2 100 120 
3 textField3 300 350 
4 textField4 800 450 
5 textField5 460 900 
6 textField6 490 700 

         ... 

的功能通過對檢查行字段之間一定的規則(函數(ROW1,ROW2)),並返回TRUE/FALSE如果這些行應一起。

我需要將該函數應用於數據框中的所有posible對,並生成一個列表(或其他結構),其中所有ID都匹配在一起。該功能適用​​於每一對

一種方式顯示在this answer

lapply(seq_len(nrow(df) - 1), 
     function(i){ 
     customFunction(df[i,], df[i+1,]) 
     }) 

但我不能想辦法到組,進行了TRUE作爲結果

編輯行:再閱讀我的問題,似乎需要一個例子:

如果我們創建了一個包含所有可能組合的矩陣,結果將爲:

 [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] TRUE FALSE FALSE FALSE FALSE FALSE 
[2,] FALSE TRUE TRUE TRUE FALSE FALSE 
[3,] FALSE TRUE TRUE FALSE FALSE FALSE 
[4,] FALSE TRUE FALSE TRUE FALSE FALSE 
[5,] FALSE FALSE FALSE FALSE TRUE TRUE 
[6,] FALSE FALSE FALSE FALSE TRUE TRUE 

,得到的組會,那麼:

1 
2,3,4 
5,6 
+0

目前尚不清楚,如果你只是想聚合所有'TRUE's在一起和所有'FALSE'在一起,或者你只是想聚合連續的'TRUE'和'FALSE'。例如,如果你得到'T,T,T,F,F,T,T',那麼輸出將是'1,2,3',然後是'4,5',然後是'6,7'?或者你只是'1,2,3,6,7'和'4,5'?或者可能有第三種選擇? – 2015-02-24 16:58:27

+1

將示例更改爲另一個示例。這是一個更好的解釋,我試圖完成什麼? – Rwak 2015-02-24 17:12:34

回答

1

這裏是一個函數,它您指定的內容:

mx <- matrix(c(TRUE,FALSE,FALSE,FALSE,FALSE,FALSE, 
FALSE,TRUE,TRUE,TRUE,FALSE,FALSE, 
FALSE,TRUE,TRUE,FALSE,FALSE,FALSE, 
FALSE,TRUE,FALSE,TRUE,FALSE,FALSE, 
FALSE,FALSE,FALSE,FALSE,TRUE,TRUE, 
FALSE,FALSE,FALSE,FALSE,TRUE,TRUE),6) 


groupings <- function(mx){ 

    out <- list() 
    while(dim(mx)[1]){ 
     # get the groups that match the first column 
     g = which(mx[,1]) 

     # expand the selection to any columns for which 
     # there is match in the first row 
     (expansion = which(apply(cbind(mx[,g]),1,any))) 
     while(length(expansion) > length(g)){ 
      g = expansion 

      # expand the selection to any columns for which 
      # there is match to the current group 
      expansion = which(apply(cbind(mx[,g]),1,any)) 
     } 

     out <- c(out,list(g)) 
     mx <- mx[-g,-g] 
    } 
    return(out) 

} 

groupings(mx) 
#> [[1]] 
#> [1] 1 
#> 
#> [[2]] 
#> [1] 1 2 3 
#> 
#> [[3]] 
#> [1] 1 2 
+0

如何以有效的方式從初始數據集創建矩陣? – Rwak 2015-02-25 08:56:51

+0

[此問題]的接受答案(http://stackoverflow.com/questions/28653691/double-for-loop-to-calculate-averages-and-store-them-in-matrix/28653854)討論了類似的問題(答案限於上三角形),並且非常全面。 – Jthorpe 2015-02-25 15:53:47

相關問題