r - case_when 在 dplyr R 中有多个条件

标签 r dplyr datatable tidyverse

我有一个看起来像这样的 data.frame

df <-data.frame(Day=c(0,0,0,1,1,1),type=c("tr1","tr2","ctrl","tr1","tr2","ctrl"),
                mean=c(0.211,0203,0.199,0.119,0.001,0.254), 
                sd=c(0.07,0.141,0.096, 0.0848, 0.0006, 0.0474))

  Day type    mean     sd
1   0  tr1   0.211 0.0700
2   0  tr2 203.000 0.1410
3   0 ctrl   0.199 0.0960
4   1  tr1   0.119 0.0848
5   1  tr2   0.001 0.0006
6   1 ctrl   0.254 0.0474

首先,我想根据 Day aka group_by(Day) 对我的数据框进行分组。 当在每组中,每种类型(tr1, tr2)的总和(mean + sd)大于 difference(mean - sd) 控件 (ctrl) 然后我想在新列 (new.col) 中赋值 ~yes 如果不是,我想分配值 ~no

例如,我希望我的数据看起来像这样。它不必看起来像这样

  Day type    mean     sd new.col
1   0  tr1   0.211 0.0700  yes
2   0  tr2 203.000 0.1410  yes
3   0 ctrl   0.199 0.0960  NA
4   1  tr1   0.119 0.0848  NO
5   1  tr2   0.001 0.0006  N0
6   1 ctrl   0.254 0.0474  NA

最佳答案

按“天”分组后,一种选择是对“类型”不是 (!=) 的“mean”、“sd”值进行子集化 “ctrl”,添加 (+) 列,得到sum,检查它是否大于(>) 'mean', 'sd' 对应的相加值 where “类型”是“ctrl”。通过加 1 将逻辑索引转换为数字索引,将其用于替换值向量 (c("NO", "Yes"))。最后使用 case_when

将 'type' 为 "ctrl"的行更改为 NA
library(dplyr)
df %>% 
    group_by(Day) %>% 
    mutate(new.col = case_when(type == "ctrl" ~ NA_character_, 
     TRUE ~ c("NO", "Yes")[1 + (sum(mean[type != "ctrl"] + 
      sd[type != "ctrl" ]) >  (mean[type == 'ctrl'] - sd[type == 'ctrl']))])) %>%
    ungroup

-输出

# A tibble: 6 x 5
    Day type     mean     sd new.col
  <dbl> <chr>   <dbl>  <dbl> <chr>  
1     0 tr1     0.211 0.07   Yes    
2     0 tr2   203     0.141  Yes    
3     0 ctrl    0.199 0.096  <NA>   
4     1 tr1     0.119 0.0848 NO     
5     1 tr2     0.001 0.0006 NO     
6     1 ctrl    0.254 0.0474 <NA>   

关于r - case_when 在 dplyr R 中有多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68278134/

相关文章:

r - 如何交换(翻译)向量内的值

在 R 中读取有向图

r - 在 tibble 上按组减去值

ajax - 空ajax响应的数据表错误

r - 在 Shiny 中抑制数据表中的排序

jquery - 在 RStudio 中 Shiny ,希望定制一个表

r - 在 R 上安装包

r - 当我在 group_by() 和 summarize() 链中使用自己的函数时,它错误地为每个组返回相同的结果

r - 使用 geom_text 在 geom_point 中添加过滤后的行名称作为标签(数据集长度错误)

php - Laravel,Yajra 数据表,如何返回 if y then Yes else No