如何在dplyr中跨行执行操作

时间:2018-10-05 19:08:07

标签: r dplyr

我试图弄清楚如何创建一个汇总统计信息,该统计信息使用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

基本上,我想创建一个按主题分组的数据框,并为我提供Deviant_RT和standard_RT的mean.RT之间的区别

这是我尝试过的:

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

我坚持如何创建这个新的因变量“ DiffRT”,这又是Deviant_RT和Standard_RT之间的区别。宁愿在dplyr中回答,但接受其他解决方案。

2 个答案:

答案 0 :(得分:4)

一种方法是切换到宽数据格式:

RTDataDifferenceWave <- RTData %>% group_by(Subject) %>% 
  tidyr::spread(BinLab, mean.RT) %>% 
  mutate(DiffRT = Deviant_RT-Standard_RT)

答案 1 :(得分:0)

请考虑Deviant_RT和StandardRT不是列,而是BinLab的值。在这种情况下,您可以使用BinLab的值在每行中预定义mean.RT的符号,然后对这些值求和,如下所示:

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更改为此:

  mutate(mean.RT_signed = mean.RT * ifelse(BinLab == 'Deviant_RT', 1, ifelse(BinLab == 'Standard_RT', -1, 0)))