我有一个数据框,我想在其中比较“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_when
from 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] 删除。
我来说两句