我有一个思考问题(不确定堆栈上是否已有解决方案,但我不知道如何解决这个问题)。
我有一个这样的数据框:
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 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现在不在我的数据中,我不能再添加变量了(因为它不再是相同的长度)。
答案 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