【发布时间】:2021-11-24 04:30:26
【问题描述】:
更新:问题是由拼写错误引起的
- 问题 1:
summarize没有组织每个组的输出,因为第三行的错字(median_dbp=(diastolic_bp)应该是median_dbp=median(diastolic_bp))。 - 问题 2:箱线图没有按
drug分组,因为对fill=drug的调用不在aes映射范围内,但它应该在内部(正确代码:ggplot(data=mydata, aes(x=timepoint, y=diastolic_bp, fill=drug))。
对于一项任务,我有以下小型交叉研究的数据,其中比较了两种药物 A 和 B 对舒张压 (DBP) 的影响。研究中的每位患者以随机顺序接受两种治疗并及时分开(“清除”期),因此一种治疗不会影响在施用另一种治疗后获得的血压测量值(即排除结转影响)。数据如下:
library(tidyverse)
library(dplyr)
library(lubridate)
library(magrittr)
mydata <- structure(list(pt_id = c(1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7,
7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15,
16, 17, 17, 18, 18, 19, 19), timepoint = structure(c(1L, 2L,
1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L,
1L, 2L), .Label = c("Timepoint 1", "Timepoint 2"), class = "factor"),
drug = structure(c(1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L,
2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L,
1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L), .Label = c("Drug A",
"Drug B"), class = "factor"), diastolic_bp = c(100, 112,
116, 114, 108, 110, 104, 114, 114, 98, 116, 102, 100, 96,
103, 92, 89, 103, 96, 116, 78, 127, 131, 129, 124, 106, 128,
133, 118, 108, 91, 109, 113, 98, 118, 112)), row.names = c(NA,
-36L), class = "data.frame")
我的第一个问题是关于在每个时间点获得每个治疗组的平均值和标准差(以及平均值 + 百分位数)。我的代码:
mydata %>%
group_by(timepoint, drug) %>%
summarise(mean_dbp=mean(diastolic_bp, na.rm=TRUE),
sd_dbp=sd(diastolic_bp, na.rm=TRUE),
median_dbp=(diastolic_bp),
p25_dbp=quantile(diastolic_bp, probs=0.25),
p75_dbp=quantile(diastolic_bp, probs=0.75))
# This returns a line per patient:
# A tibble: 36 x 7
# Groups: timepoint, drug [4]
timepoint drug mean_dbp sd_dbp median_dbp p25_dbp p75_dbp
<fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Timepoint 1 Drug A 105. 14.1 100 96 108
2 Timepoint 1 Drug A 105. 14.1 108 96 108
3 Timepoint 1 Drug A 105. 14.1 98 96 108
4 Timepoint 1 Drug A 105. 14.1 96 96 108
5 Timepoint 1 Drug A 105. 14.1 92 96 108
6 Timepoint 1 Drug A 105. 14.1 127 96 108
7 Timepoint 1 Drug A 105. 14.1 129 96 108
8 Timepoint 1 Drug A 105. 14.1 106 96 108
9 Timepoint 1 Drug A 105. 14.1 91 96 108
10 Timepoint 1 Drug B 114. 9.64 116 110. 116.
# ... with 26 more rows
但这会为数据集中的每一行生成计算。我所期待的是drug 和timepoint 的每个组合的第一名...
然后我尝试为每个时间点和组制作一个箱线图,如下所示:
ggplot(data=mydata, aes(x=timepoint, y=diastolic_bp), fill=drug) + geom_boxplot()
有什么帮助吗?
【问题讨论】:
-
检查括号。您没有在 aes() 中包含
fill=drug。 -
Stefan 为您解答!
-
谢谢!将其包含在
aes中解决了有关箱线图的问题。您是否也知道如何解决有关summarise的问题?例如,我试图在每个timepoint处为每个drug获取diastolic_bp的平均值和SD,但我的代码没有给我那个。 -
请不要用已有的问题来问其他问题(每个帖子应该只问一个可以回答的特定问题,并且在给出正确答案后不要移动球门柱......)跨度>
-
也许:mydata %>% group_by(drug, timepoint) %>% summarise("q25" = quantile(diastolic_bp, c(0.25)), "q50" = quantile(diastolic_bp, c(0.50) )), "q75" = quantile(diastolic_bp, c(0.75)), mean = mean(diastolic_bp), sd = sd(diastolic_bp))