【发布时间】:2021-01-28 07:29:51
【问题描述】:
在应用于心理学的数据分析中,我们经常想要检查每个主题的所有结果。因此,假设我有这个数据集:
library(tidyverse)
set.seed(123)
ds <- data.frame(subject = rep(1:4, each=4),
metadata = c("congruent_1","congruent_2","incongruent_1", "incongruent_2"),
reaction_time = rnorm(16,mean = 0.1, sd=0.02))
我可以得到按每个主题分组的均值和标准差
#mean
ds %>%
group_by(subject) %>%
filter(metadata == "congruent_1" | metadata == "congruent_2") %>%
summarise(mean_cong = mean(reaction_time))
#sd
ds %>%
group_by(subject) %>%
filter(metadata =="incongruent_1" | metadata == "incongruent_2") %>%
summarise(sd_cong_incong = sd(reaction_time))
但是,现在我需要用mean_cong / sd_cong_incong 的结果计算一个变量。我确信这可以通过 group_by 或 nest 实现,但我没有得到正确的代码来运行它。
一个假代码将是
ds %>%
group_by(subject) %>%
filter(metadata == "congruent_1" | metadata == "congruent_2") %>%
summarise(mean_cong = mean(reaction_time)) %>%
unfilter() %>% #<- I know this is not possible
filter(metadata =="incongruent_1" | metadata == "incongruent_2") %>%
summarise(sd_cong_incong = sd(reaction_time)) %>%
mutate(pooled = mean_cong/sd_cong_incong)
假输出将是:
【问题讨论】:
-
您的意思是用
sd(reaction_time)而非mean(reaction_time)来计算标准差,还是我误解了您的问题? -
是的。谢谢。我改变了问题。
标签: r dplyr group-by tidyverse