Вы можете фильтровать на нескольких уровнях? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть этот набор данных с именем «Поведенческий» (выборка гораздо большего набора данных с 800 значениями Stim.RT и Stim.A CC для каждого субъекта на каждом сеансе)

enter image description here

Я хочу получить общее среднее значение Stim.RT и среднее значение Stim.A cc для каждой текстовой категории. Например, я обычно делал бы это:

Dataset<-Behavioral%>%
  select(Subject, Session, Stim.ACC, Stim.RT, Text) %>%
  group_by(Text) %>%
  summarize(mean.ac = mean(Stim.ACC), mean.RT = mean(Stim.RT))

И он возвращал бы что-то вроде этого:

enter image description here

Единственная проблема есть, Я хочу отфильтровать все пары субъект-сессия, чьи средние значения .a c меньше, чем .50 ДО того, как я получу эту вторую таблицу обратно. Ie. Если для субъекта 1 среднее значение .a c было 0,45 в сеансе 1, я хочу удалить все значения его сеанса 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 неизвестен

Ответы [ 2 ]

1 голос
/ 20 марта 2020

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 после group_by, единственными переменными в полученном тибле являются переменные в 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 в соответствии с вашими требованиями, и мне потребовались только Subject и Session, которые я inner_join отредактировал в исходный набор данных, чтобы Subject и Session соответствие условию включено. inner_join это как join и filter. Затем я пошел вперед и рассчитал mean.ac и mean.RT для каждого Text post- inner_join.

0 голосов
/ 20 марта 2020

Похоже, вам нужно три группы.

Dataset<-Behavioral%>%
  select(Subject, Session, Stim.ACC, Stim.RT, Text) %>%
  group_by(Subject, Session, Text) %>%
  summarize(mean.ac = mean(Stim.ACC), mean.RT = mean(Stim.RT))%>%
  filter(mean >= 0.5) %>%
  group_by(Text) %>%
  summarize(mean.ac = mean(mean.ac), mean.RT = mean(mean.RT))

В следующий раз попробуйте сделать представ , чтобы мы могли напрямую работать с вашими данными.

...