【问题标题】:How to compare columns grouped by another column and give an output in new column in R?如何比较由另一列分组的列并在 R 的新列中给出输出?
【发布时间】:2021-05-05 14:58:28
【问题描述】:

我有一个数据框,我想在其中比较列父亲与男性 ID 和母亲与女性 ID 列,并根据分配给每个巢穴的个体数量给出输出。

这是: 如果父亲==male_id 和母亲==female_id 在巢的至少4 个个体中,则输出=“父母正确”。

如果巢中至少有 4 个个体中的父亲!=male_id 和母亲 ==female_id,则输出 =“母亲正确”。

如果巢中至少有 4 个个体中的父亲 ==male_id 和母亲!=female_id,则输出 =“父亲正确”

如果父亲!=male_id 和母亲!=female_id 在巢的至少 4 个个体中,则输出 =“新家庭”

df <- data_frame( 
  Progeny = c("ne1_1","ne1_2","ne1_3","ne1_4","ne1_5","ne1_6",
              "ne2_1","ne2_2","ne2_3","ne2_4","ne2_5","ne2_6", 
              "ne3_1","ne3_2","ne3_3","ne3_4","ne3_5",
              "ne4_1","ne4_2","ne4_3","ne4_4","ne4_5","ne4_6", 
              "ne5_1","ne5_2","ne5_3","ne5_4","ne5_5","ne5_6"),
  Father = c("A4202","A4202","A4202","A4202","A4202","A4202",
             "*1","*1","*1","*1","*1","*1",
             "A4204","A4204","A4201","A4204","A4204",
             "A3271","A3271","A3271","A3271","A3271","A3271",
             "A3226","A3226","A3226","A3226","A3226","A3226"),
  Mother = c("A1192","A1192","#1","A1192","A1192","A1192",
             "A1198","A1198","A1198","A1198","A1198","A1198",
             "A1190","A1190","#8","A1190","A1190",
             "#2","#2","#2","#2","#2","#2",
             "A0519","A0519","A0519","A0519","A0519","A0519"),
  nest = c("ne1","ne1","ne1","ne1","ne1","ne1",
          "ne2","ne2","ne2","ne2","ne2","ne2",
          "ne3","ne3","ne3","ne3","ne3",
          "ne4","ne4","ne4","ne4","ne4","ne4",
          "ne5","ne5","ne5","ne5","ne5","ne5"),
  male_id = c("A4202","A4202","A4202","A4202","A4202","A4202",
              "A4204","A4204","A4201","A4204","A4204","A4204",
              "NA_1","NA_1","NA_1","NA_1","NA_1",
              "A3271","A3271","A3271","A3271","A3271","A3271",
              "A3225","A3225","A3225","A3225","A3225","A3225"),
  female_id = c("A1192","A1192","A1192","A1192","A1192","A1192",
                "A1198","A1198","A1198","A1198","A1198","A1198",
                "A1190","A1190","A1190","A1190","A1190",
                "A2108","A2108","A2108","A2108","A2108","A2108",
                "A0576","A0576","A0576","A0576","A0576","A0576"))

带输出:

df
   Progeny Father  Mother   nest  male_id female_id output
1   ne1_1   A4202   A1192   ne1   A4202    A1192    parents correct
2   ne1_2   A4202   A1192   ne1   A4202    A1192    parents correct
3   ne1_3   A4202   #1      ne1   A4202    A1192    parents correct
4   ne1_4   A4202   A1192   ne1   A4202    A1192    parents correct
5   ne1_5   A4202   A1192   ne1   A4202    A1192    parents correct
6   ne1_6   A4202   A1192   ne1   A4202    A1192    parents correct
7   ne2_1   *1      A1198   ne2   A4204    A1198    mother correct
8   ne2_2   *1      A1198   ne2   A4204    A1198    mother correct
9   ne2_3   *1      A1198   ne2   A4201    A1198    mother correct
10  ne2_4   *1      A1198   ne2   A4204    A1198    mother correct
11  ne2_5   *1      A1198   ne2   A4204    A1198    mother correct
12  ne2_6   *1      A1198   ne2   A4204    A1198    mother correct
13  ne3_1   A4204   A1190   ne3   NA_1     A1190    mother correct
14  ne3_2   A4204   A1190   ne3   NA_1     A1190    mother correct
15  ne3_3   A4201   #8      ne3   NA_1     A1190    mother correct
16  ne3_4   A4204   A1190   ne3   NA_1     A1190    mother correct
17  ne3_5   A4204   A1190   ne3   NA_1     A1190    mother correct
18  ne4_1   A3271   #2      ne4   A3271    A2108    father correct
19  ne4_2   A3271   #2      ne4   A3271    A2108    father correct
20  ne4_3   A3271   #2      ne4   A3271    A2108    father correct
21  ne4_4   A3271   #2      ne4   A3271    A2108    father correct
22  ne4_5   A3271   #2      ne4   A3271    A2108    father correct
23  ne4_6   A3271   #2      ne4   A3271    A2108    father correct
24  ne5_1   A3226   A0519   ne5   A3225    A0576    new parents  
25  ne5_2   A3226   A0519   ne5   A3225    A0576    new parents 
26  ne5_3   A3226   A0519   ne5   A3225    A0576    new parents
27  ne5_4   A3226   A0519   ne5   A3225    A0576    new parents
28  ne5_5   A3226   A0519   ne5   A3225    A0576    new parents
29  ne5_6   A3226   A0519   ne5   A3225    A0576    new parents

非常感谢任何帮助,我知道我可以使用 if_else 函数,但我不知道如何包含每个巢中至少 4 个人的状况。

【问题讨论】:

    标签: r compare


    【解决方案1】:

    这是case_when 来自dplyr 的方法:

    library(dplyr)
    df %>%
      group_by(nest) %>%
      mutate(output = case_when(sum(male_id == Father) >= 4 & sum(female_id == Mother) >= 4 ~ "parents correct",
                                sum(male_id == Father) >= 4 ~ "father correct",
                                sum(female_id == Mother) >= 4 ~ "mother correct",
                                TRUE ~ "new parents"))
    ## A tibble: 29 x 7
    ## Groups:   nest [5]
    #   Progeny Father Mother nest  male_id female_id output         
    #   <chr>   <chr>  <chr>  <chr> <chr>   <chr>     <chr>          
    # 1 ne1_1   A4202  A1192  ne1   A4202   A1192     parents correct
    # 2 ne1_2   A4202  A1192  ne1   A4202   A1192     parents correct
    # 3 ne1_3   A4202  #1     ne1   A4202   A1192     parents correct
    # 4 ne1_4   A4202  A1192  ne1   A4202   A1192     parents correct
    # 5 ne1_5   A4202  A1192  ne1   A4202   A1192     parents correct
    # 6 ne1_6   A4202  A1192  ne1   A4202   A1192     parents correct
    # 7 ne2_1   *1     A1198  ne2   A4204   A1198     mother correct 
    # 8 ne2_2   *1     A1198  ne2   A4204   A1198     mother correct 
    # 9 ne2_3   *1     A1198  ne2   A4201   A1198     mother correct 
    #10 ne2_4   *1     A1198  ne2   A4204   A1198     mother correct 
    ## … with 19 more rows
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 2021-09-17
      • 1970-01-01
      相关资源
      最近更新 更多