尝试将具有重复ID的行的具有多个布尔列的数据框转换为新的数据框,其中每个ID仅具有一个条目,但ID组的布尔值将组合在一起。我还想记下最新的日期值。
示例输入:
ID S1 S2 S3 S4 Date
1 ex1 1 0 0 0 4/7/12
2 ex1 0 1 0 0 6/8/16
3 ex2 0 0 1 0 5/5/15
4 ex3 1 1 0 0 4/19/13
5 ex3 0 1 0 1 6/7/15
6 ex4 0 1 0 0 8/7/09
7 ex5 1 1 1 0 6/12/17
所需的输出:
ID S1 S2 S3 S4 Date
ex1 1 1 0 0 6/8/16
ex2 0 0 1 0 5/5/15
ex3 1 1 0 1 6/7/15
ex4 0 1 0 0 8/7/09
ex5 1 1 1 0 6/12/17
答案 0 :(得分:1)
简单总结如下-
df <- df %>% group_by(ID) %>% summarize( S1=max(S1), S2 =max(S2), S3 =max(S3), S4 = max(S4), Date = max(Date) )
答案 1 :(得分:0)
library(data.table)
setDT(df)
df[, lapply(.SD, max), ID]
# ID S1 S2 S3 S4 Date
# 1: ex1 1 1 0 0 2016-06-08
# 2: ex2 0 0 1 0 2015-05-05
# 3: ex3 1 1 0 1 2015-06-07
# 4: ex4 0 1 0 0 2009-08-07
# 5: ex5 1 1 1 0 2017-06-12
这也有效:
library(dplyr)
df %>%
group_by(ID) %>%
summarise_all(max)
或在Base R中:
do.call(rbind
, lapply(split(df, df$ID)
, function(g) data.frame(lapply(g, max))))
使用的数据:
df <- fread("
a ID S1 S2 S3 S4 Date
1 ex1 1 0 0 0 4/7/12
2 ex1 0 1 0 0 6/8/16
3 ex2 0 0 1 0 5/5/15
4 ex3 1 1 0 0 4/19/13
5 ex3 0 1 0 1 6/7/15
6 ex4 0 1 0 0 8/7/09
7 ex5 1 1 1 0 6/12/17
")[, -1]
df[, Date := lubridate::mdy(Date)]