我有一个思考问题(不确定堆栈上是否已有解决方案,但我不知道如何解决这个问题).
我有一个这样的数据框:
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
Run Code Online (Sandbox Code Playgroud)
我想制作一个新的数据框,包括:
所以结果应该是这样的:
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
Run Code Online (Sandbox Code Playgroud)
我试过这个:
data %>% group_by(ID) %>% summarise_at(vars(-Time), funs(sum.,na.rm = TRUE)))
Run Code Online (Sandbox Code Playgroud)
但是,有我的想法问题:变量Time现在不在我的数据中,我不能再添加变量了(因为它不再是相同的长度).
我们可以这样做 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"))]
Run Code Online (Sandbox Code Playgroud)
或者dplyr,在按"ID"分组后,通过取first"时间"然后在分组变量中添加"时间",然后执行summarise_all
data %>%
group_by(ID) %>%
group_by(Time = first(Time), add = TRUE) %>%
summarise_all(sum, na.rm = TRUE)
# A tibble: 3 x 6
# Groups: ID [?]
# ID Time Visits X Y Z
# <int> <chr> <int> <int> <int> <int>
#1 1 2016-05-15 06:38:40 8 1 2 1
#2 2 2016-05-15 09:38:40 3 1 0 2
#3 3 2016-05-15 10:38:40 3 1 1 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |