2017-10-09 58 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