如何比较按另一列分组的列并在 R 的新列中给出输出?

LR

我有一个数据框,我想在其中比较“Father vsmale_id”和“Mother vs Female_id”列,并根据分配给每个巢的个体数量给出输出。

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

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

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

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

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 个个体的条件。

伊恩坎贝尔

这是一种方法case_whenfrom 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R:计算一列中的值的分数,按另一列中的值分组

如何计算可以按 R 中另一列分组的值

在R中按组比较一列的值与另一列中的多个值

如何在R中按组比较日期和更改另一列中的值

R:我如何 c() 按另一列分组的嵌套字符向量?

创建直方图,按列分组,然后按R中的另一列求和

比较两列不同的数据框并在 R 中创建另一列

按列分组并按R中的另一列排序

按多列分组并从R中的另一列分配值

r 创建与按另一列分组的行元素匹配的新数据框

R分组依据| 计算按另一列分组的不同值

按另一列的成对组合计算列的唯一值,并按R按第三列分组

R按一列分组并将自定义函数应用于另一列

如何根据R中的分组将单独的列值添加到另一列?

如何按某些列分组并在现有的另一列中显示分组值

R按日期分组以获取频率并使用另一列进行过滤

如何比较r中矩阵的两列并在新向量中输出列名称

如何按 r 中的一列中的不同值进行分组,以便生成密度图?

使用差异对列进行分组并在熊猫中按另一列对另一列进行排序

汇总一列中的值并按R中的另一列分组

R语言-按一列分组的多列计数

从R中的另一列创建新列

将数据框按列分组,并在另一列中压缩字符串

创建新列,该列采用另一列值的总和并按 R 中的条件分组

如何在熊猫中按一列或另一列分组

如何基于R中另一列中的最高编号来计算新列?

如何从两列中按因子级别分组并输出显示R中每个级别总和的新列?

根据另一列中的值创建新的r data.table列并进行分组

按多列分组,根据一列排序,然后选择 R 中的前 n 个