r - 使用 dplyr 将列的值与每组中的参考值进行比较
问题描述
我有一个看起来像这样的 data.frame
df <- data.frame(id=c(1,1,1,2,2,2), outcome=c(0.1,0.2,0.3,0.1,0.2,0),
type=c("trt1","trt2", "control","trt1","trt2", "control"))
id outcome type
1 1 0.1 trt1
2 1 0.2 trt2
3 1 0.3 control
4 2 0.1 trt1
5 2 0.2 trt2
6 2 0.0 control
我想在每组中将 trt1 和 trt2 的结果值与对照的结果值进行比较。如果控件的结果值更大或相等,我需要一个带有 yes 指示的新列,如果不是 no 指示。
期望的结果是这样的。
id outcome type new.col
1 1 0.1 trt1 yes
2 1 0.2 trt2 yes
3 1 0.3 control yes or NA (optional)
4 2 0.1 trt1 no
5 2 0.2 trt2 no
6 2 0.0 control no or NA (optional)
我为此苦苦挣扎,感谢您的帮助。
解决方案
使用case_when
-
library(dplyr)
df %>%
group_by(id) %>%
mutate(new.col = case_when(type == 'control' ~ NA_character_,
outcome[type == 'control'] >= outcome ~ 'yes',
TRUE ~ 'no')) %>%
ungroup
# id outcome type new.col
# <dbl> <dbl> <chr> <chr>
#1 1 0.1 trt1 yes
#2 1 0.2 trt2 yes
#3 1 0.3 control NA
#4 2 0.1 trt1 no
#5 2 0.2 trt2 no
#6 2 0 control NA
推荐阅读
- javascript - 请问这段代码有什么问题,这是我的作业,我一直出错
- python - 使用优先附着算法的无标度网络
- ios - MFMailComposeViewController 不发送电子邮件或关闭
- google-apps-script - 使用 Google Apps 脚本的 Web 应用程序不适用于分布式 URL
- angular - 如何更改ngFor中对象的属性?
- java - 如何在 Java 而不是 XML 中以编程方式设置视图的重力和 layout_gravity?
- php - 如何在 Phpmyadmin 中使用主键和外键创建关系数据库?
- asp.net-core - 如何在控制器动作上使用多态性一种方法
- javascript - 如何确保我可以在 Java Script 的绘图函数中制作许多球动画?
- django - 模板上未显示 Django 数据库对象