2017-10-09 57 views
1

我有一組數據框,一組1200個個案在一列中重複,共2400個。即A1.1234567_10,A1.1234567_20,有多列我想比較,以便每個重複對在每列中具有相同或不同的結果。列包含因素我怎樣才能做到這一點,以便它可以爲我的因素提供邏輯。我想通過其ID匹配_10和_20(即A1.1234567)選擇每一種情況下:比較重複樣本

例 (數據幀的一行)

A1.1234567_10 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL 

A1.1234567_20 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL ABNORMAL NORMAL 

標識等的輸出看起來像這樣(新的數據幀)

A1.1234567 TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE 

,這將重複所有樣品下降了唯一的ID號列的比較_10和_20

+0

您可能需要檢查'duplicated' – akrun

回答

2

這裏有一個tidyverse選項:

library(tidyverse) 

df <- structure(list(ID = c("A1.1234567_10", "A1.1234567_20"), 
        var1 = c("NORMAL", "NORMAL"), 
        var2 = c("NORMAL", "NORMAL"), 
        var3 = c("NORMAL", "NORMAL"), 
        var4 = c("NORMAL", "NORMAL"), 
        var5 = c("NORMAL", "NORMAL"), 
        var6 = c("NORMAL", "NORMAL"), 
        var7 = c("NORMAL", "ABNORMAL"), 
        var8 = c("NORMAL", "NORMAL")), 
       .Names = c("ID", "var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8"), 
       class = "data.frame", row.names = c(NA, -2L)) 

# separate group variable from observation label 
df_tidy <- df %>% separate(ID, c('ID', 'obs'), sep = '_') 

df_tidy 
#>   ID obs var1 var2 var3 var4 var5 var6  var7 var8 
#> 1 A1.1234567 10 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL 
#> 2 A1.1234567 20 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL ABNORMAL NORMAL 

df_tidy %>% 
    select(-obs) %>% 
    group_by(ID) %>% 
    summarise_all(lift(`==`)) 
#> # A tibble: 1 x 9 
#>   ID var1 var2 var3 var4 var5 var6 var7 var8 
#>  <chr> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> 
#> 1 A1.1234567 TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE 
+0

我嘗試使用我自己的數據框完全一樣,我不斷收到錯誤:Erro r in summarise_impl(.data,dots): 評估錯誤:運算符需要兩個參數。 – Randy

+0

該方法假定兩行組合。如果你有更多,也許使用'summarise_all(reduce,\'== \')'。如果你有一排組,一些額外的,但可能是必要的。 – alistaire

0

tidyverse另一種方法(學分@ alistaire的dput):

library(tidyverse) 
library(stringr) 
df %>% 
    group_by(ID = str_extract(ID, ".+(?=_)")) %>% 
    summarize_all(funs(dim(table(.)) == 1)) 

結果:

# A tibble: 1 x 9 
      ID var1 var2 var3 var4 var5 var6 var7 var8 
     <chr> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> 
1 A1.1234567 TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE 
+0

這給了我第一部分正確的允許我結合樣品,但不知何故,當我知道不是這樣的時候,每一個現在都是假的 – Randy