这一定很简单,但我被困住了。我想使用 ifelse 语句中的 where 语句来改变一些分组数据。这是一个有效的示例:
example <- tibble::tribble(
~Group, ~Code, ~Value,
"1", "A", 1,
"1", "B", 1,
"1", "C", 5,
"2", "A", 1,
"2", "B", 5,
"2", "C", 2
)
example %>% group_by(Group) %>%
mutate(GroupStatus=ifelse(Value[Code=="C"]==5, 1, 0))
这给出了期望的结果:
Group Code Value GroupStatus
<chr> <chr> <dbl> <dbl>
1 1 A 1 1
2 1 B 1 1
3 1 C 5 1
4 2 A 1 0
5 2 B 5 0
6 2 C 2 0
问题是其中一组缺少代码 C,如下所示:
example2 <- tibble::tribble(
~Group, ~Code, ~Value,
"1", "A", 1,
"1", "B", 1,
"1", "C", 5,
"2", "A", 1,
"2", "B", 5
)
example2 %>% group_by(Group) %>%
mutate(GroupStatus=ifelse(Value[Code=="C"]==5, 1, 0))
这给了我一个错误:错误:mutate()
列GroupStatus
出现问题。
i GroupStatus = ifelse(Value[Code == "C"] == 5, 1, 0)
。
i GroupStatus
的大小必须为 2 或 1,而不是 0。
i 错误发生在组 2:组 =“2”。
我希望将任何缺少代码 C 的组中的“GroupStatus”设置为零。这可能吗?
最佳答案
另一种可能的解决方案,基于嵌套的ifelse
:
library(dplyr)
example2 <- tibble::tribble(
~Group, ~Code, ~Value,
"1", "A", 1,
"1", "B", 1,
"1", "C", 5,
"2", "A", 1,
"2", "B", 5
)
example2 %>%
group_by(Group) %>%
mutate(GroupStatus = ifelse("C" %in% Code,
ifelse(Value[Code == "C"] == 5, 1, 0), 0)) %>%
ungroup
#> # A tibble: 5 × 4
#> Group Code Value GroupStatus
#> <chr> <chr> <dbl> <dbl>
#> 1 1 A 1 1
#> 2 1 B 1 1
#> 3 1 C 5 1
#> 4 2 A 1 0
#> 5 2 B 5 0
关于r - Ifelse 以分组数据为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71073339/