在R表中,如何通过从每个主题中减去另一行来创建新行

时间:2016-02-15 01:15:37

标签: r

所以我有一张表d,看起来像这样

id     trial    V1   V2  V3  V4
101      1       1    1   1   1
101      2       10   12  13  20
101      3       3    3   2   9
102      1       1    1   1   1 
102      2       10   12  11  11
102      3       9    8   7   6
103      1       1    1   1   1
103      2       2    3   4   5
103      3       11   12  13  14
 ...

基本上我需要创建新行,可能在新表中,显示每个变量(V1,V2,V3,V4)的试验3和试验1之间的差异,可能是这样的: 如果是新表:

id         V1   V2  V3  V4
101         2    2   1   8
102         8    7   6   5
103         10   12  13  14
...

我在考虑使用dplyr并通过id聚合它,并且每列都是差异,但不确定dplyr是否可以这样做,所以现在我有点卡住了。任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:2)

假设您在每个ID中始终有1,2,3个试验 - 您可以在summarize_each中定义一个函数并使用dplyr

library(dplyr)
myfun <- function(x) { x[[3]]-x[[1]] }

df %>% 
  group_by(id) %>%
  summarize_each(funs(myfun)) %>%
  select(-trial)


    id    V1    V2    V3    V4
  (int) (int) (int) (int) (int)
1   101     2     2     1     8
2   102     8     7     6     5
3   103    10    11    12     0