r - Ifelse 以分组数据为条件

标签 r if-statement dplyr

这一定很简单,但我被困住了。我想使用 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/

相关文章:

r - 向 x 轴添加嵌套/分组级别

java - 如何创建这个循环,使输出与输入相同,除非我按 "end"然后程序结束?

r - 编写一个函数,根据数据帧的列值在矩阵中查找元素

r - 在R中获取英语的工作日

r - choroplethr 图例未打印某些图,scale_fill_brewer() 的问题

javascript - 基本的 coffeescript 查找是否在数组中

java - Java 对带有 final 变量的 if 语句有多聪明

r - R:按分组变量划分的唯一ID的分层随机样本比例

r - 当我渲染 R markdown 时隐藏包加载消息

r - 使用 R 列出具有指定扩展名的所有文件