总结唯一值上的行,时间列

时间:2018-02-08 12:49:04

标签: r dplyr

我有一个思考问题(不确定堆栈上是否已有解决方案,但我不知道如何解决这个问题)。

我有一个这样的数据框:

ID      Visits    Time                      X    Y    Z 
1        2        2016-05-15 06:38:40       1    1    0 
1        4        2016-05-15 07:38:40       0    0    1 
1        2        2016-05-15 08:38:40       0    1    0 
2        3        2016-05-15 09:38:40       1    0    2 
3        2        2016-05-15 10:38:40       0    1    0 
3        1        2016-05-15 11:38:40       1    0    1 

我想创建一个新数据框,其中包含:

  • 唯一ID(我想用group_by());
  • 其他列(时间除外)总和;
  • 保持第一时间

所以结果应该是这样的:

ID      Visits    Time                      X    Y    Z 
1        8        2016-05-15 06:38:40       1    2    1 
2        3        2016-05-15 09:38:40       1    0    2 
3        3        2016-05-15 10:38:40       1    1    1 

我试过了:

data %>% group_by(ID) %>% summarise_at(vars(-Time), funs(sum.,na.rm = TRUE)))

但是,有一个我的想法问题:变量Time现在不在我的数据中,我不能再添加变量了(因为它不再是相同的长度)。

1 个答案:

答案 0 :(得分:7)

我们可以使用data.table

执行此操作
library(data.table)
setDT(data)[, c(list(Time = Time[1]), lapply(.SD, sum, na.rm = TRUE)), 
            ID, .SDcols = setdiff(names(data), c("ID", "Time"))]

或者使用dplyr,在按ID'分组后,添加“时间”'同样在分组变量中,取{&1;}时间'然后使用first

summarise_all