我有一个数据集,其中有一个名为“个体”的变量,有很多选项,就像这样。 我对某一天对不同个体 (Individual_ID) 的观察结果
个人的不同选择如下: individual_ID("Adele", "Fitz", "Abba")...这些将属于 Group=A 的组 individual_ID("Noir", "Rouge", "Bleue")...这些将属于一个名为 Group=B
的组在某些情况下,来自不同群体的个体可能会混合在一起,所以我们有这样的东西 individual_ID("Adele", "Rouge", "Bleue")...所以这代表一个混合组,
我想创建一个名为 GroupingID 的变量,它可以是 GroupA、GroupB 或 MixedGroup 为此,我并不精确地说该群体中的所有个人都在场,而是指出个人的代表相对于他们的群体来说是整齐的还是不整齐的。
为了考虑混合分组,任何涉及至少两个来自不同组的个体的组合就足够了。
有人可以解释一下如何在 mutate 中应用条件 AND/OR 来创建变量分组吗?
这是我的数据的样子
Date IndividualsObserved
1/1/2016 Abba,Adele
2/1/2016 Adele,Fitz
3/1/2016 Fitz,Rouge,Noir
4/1/2016 Fitz,Adele,Abba
5/1/2016 Rouge,Noir,Bleue
6/1/2016 Rouge,Abba,Fitz
(在“IndividualsObserved”列的每个输入单元格中,不同的个体以逗号分隔)
所以我希望有一个分组类别,能够辨别分组是否整齐(只有一个群体标识,或者分组是否由来自不同群体的个体混合组成)。 会是这样的(GroupingID)
Date IndividualsObserved GroupingID
1/1/2016 Abba,Adele GroupA
2/1/2016 Adele,Fitz GroupA
3/1/2016 Fitz,Rouge,Noir MixedGrouping
4/1/2016 Fitz,Adele,Abba GroupA
5/1/2016 Rouge,Noir,Bleue GroupB
6/1/2016 Rouge,Abba,Fitz MixedGrouping
7/1/2016 Noir,Bleue,Abba MixedGrouping
我尝试过但没有成功:
mutate(GroupingID = case_when(IndividualsObserved %in% c("Adele","Abba", "Fitz") ~ "GroupA",
IndividualsObserved %in% c("Noir","Bleue", "Rouge") ~ "GroupB",
TRUE ~ ToCheck))
如果您对如何使用 mutate 选项来解决此问题有任何见解,我将不胜感激,
我尝试使用 dplyr 函数 mutate
library(tidyverse)
groups <- list("A" = c("Adele", "Fitz", "Abba"),
"B" = c("Rouge", "Noir", "Bleue"))
df |>
mutate(IndividualsObserved = str_split(IndividualsObserved, ","),
Group = map_chr(IndividualsObserved, \(x) {
a <- any(x %in% groups$A)
b <- any(x %in% groups$B)
case_when(a & b ~ "MixedGrouping",
a ~ "GroupA",
b ~ "GroupB",
TRUE ~ "None")}))
输出:
Date IndividualsObserved Group
1 1/1/2016 Abba, Adele GroupA
2 2/1/2016 Adele, Fitz GroupA
3 3/1/2016 Fitz, Rouge, Noir MixedGrouping
4 4/1/2016 Fitz, Adele, Abba GroupA
5 5/1/2016 Rouge, Noir, Bleue GroupB
6 6/1/2016 Rouge, Abba, Fitz MixedGrouping
7 7/1/2016 Noir, Bleue, Abba MixedGrouping
数据:
df <- read.table(text=
"Date IndividualsObserved
1/1/2016 Abba,Adele
2/1/2016 Adele,Fitz
3/1/2016 Fitz,Rouge,Noir
4/1/2016 Fitz,Adele,Abba
5/1/2016 Rouge,Noir,Bleue
6/1/2016 Rouge,Abba,Fitz
7/1/2016 Noir,Bleue,Abba", header = T)