r - 您可以在多个级别进行过滤吗?
问题描述
我有这个名为“行为”的数据集(更大的数据集样本,每个会话中每个主题有 800 个 Stim.RT 和 Stim.ACC 值)
我想获得每个文本类别的总体平均 Stim.RT 和平均 Stim.Acc。例如,我通常会这样做:
Dataset<-Behavioral%>%
select(Subject, Session, Stim.ACC, Stim.RT, Text) %>%
group_by(Text) %>%
summarize(mean.ac = mean(Stim.ACC), mean.RT = mean(Stim.RT))
它会返回如下内容:
唯一的问题是,在我取回第二张表之前,我想过滤掉 mean.ac 值小于 0.50 的所有主题-会话对。 IE。如果主题 1 的 mean.ac 在会话 1 中为 0.45,我希望删除他们的所有会话 1 值。
我试过这个:
Dataset<-Behavioral%>%
select(Subject, Session, Stim.ACC, Stim.RT, Text) %>%
group_by(Subject, Session) %>%
summarize(mean.ac = mean(Stim.ACC), mean.RT = mean(Stim.RT))%>%
group_by(Text)
我收到此错误:错误:列Text
未知
解决方案
library(dplyr)
Behavioral%>%
select(Subject, Session, Stim.ACC, Stim.RT, Text) %>%
group_by(Subject, Session) %>%
summarize(mean.ac = mean(Stim.ACC), mean.RT = mean(Stim.RT)) %>%
ungroup() %>%
filter(mean.ac >= 0.5) %>%
select(Subject, Session) %>%
inner_join(Behavioral, by = c("Subject" = "Subject", "Session" = "Session")) %>%
select(Subject, Session, Stim.ACC, Stim.RT, Text) %>%
group_by(Text) %>%
summarize(mean.ac = mean(Stim.ACC), mean.RT = mean(Stim.RT)) %>%
ungroup()
所以你得到错误的原因是因为Text
它不是group_by
函数的一部分,当你summarise
在 a 之后group_by
,你得到的 tibble 中唯一的变量是你在中group_by
创建的变量和变量summarise
。所以在你的情况下,结果变量
Dataset<-Behavioral%>%
select(Subject, Session, Stim.ACC, Stim.RT, Text) %>%
group_by(Subject, Session) %>%
summarize(mean.ac = mean(Stim.ACC), mean.RT = mean(Stim.RT))
将是Subject
, Session
, mean.ac
, mean.RT
.
正因为如此,我根据您的要求过滤了何时,并且mean.ac >= 0.5
只需要我编辑到原始数据集的和,以便包括满足条件的和。就像一个和。然后我继续计算每个帖子的and 。Subject
Session
inner_join
Subject
Session
inner_join
join
filter
mean.ac
mean.RT
Text
inner_join