Как выполнять операции над строками в dplyr - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь выяснить, как создать сводную статистику, которая использует информацию разных строк в dplyr

Subject   BinLab      mean.RT 
s001      Deviant_RT  533.8115
s001      Standard_RT 508.2450
s002      Deviant_RT  465.5538
s002      Standard_RT 425.0351

По сути, я хочу создать фрейм данных, который группируется по темам и дает мне разницумежду mean.RT для Deviant_RT и Standard_RT

Вот что я пробовал:

RTDataDifferenceWave <- RTData %>%
  group_by(Subject) %>%
  summarise(DiffRT = Deviant_RT-StandardRT)

Я застрял на том, как создать эту новую зависимую переменную "DiffRT", которая, опять же,разница между Deviant_RT и Standard_RTПредпочел бы ответ в dplyr, но открыт для других решений.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Учтите, что Deviant_RT и StandardRT не являются столбцами, а являются значениями BinLab.В этом случае вы можете предварительно определить знак mean.RT в каждой строке, используя значение BinLab, а затем суммировать значения следующим образом:

RTDataDifferenceWave <- RTData %>%
  mutate(mean.RT_signed = mean.RT * ifelse(BinLab == 'Deviant_RT', 1, -1)) %>%
  group_by(Subject) %>%
  summarise(DiffRT = sum(mean.RT_signed))

Обратите внимание, что предполагается, что BinLab может быть только одним из Deviant_RTили StandardRT.Если он может принимать другие значения, вы можете изменить его на следующее:

  mutate(mean.RT_signed = mean.RT * ifelse(BinLab == 'Deviant_RT', 1, ifelse(BinLab == 'Standard_RT', -1, 0)))
0 голосов
/ 05 октября 2018

Один из способов - переключиться на широкоформатный формат данных:

RTDataDifferenceWave <- RTData %>% group_by(Subject) %>% 
  tidyr::spread(BinLab, mean.RT) %>% 
  mutate(DiffRT = Deviant_RT-Standard_RT)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...