【发布时间】:2021-10-30 22:12:48
【问题描述】:
我想分两步对数据框 (dat) 进行子集化。第一个约束:保持唯一的“id”。第二个约束:保持最小的“访问”。 例如,对于 id=S2,我想保留访问 #1 的第 3 行,而不是访问 #2 的第 2 行。
set.seed(42) ## for sake of reproducibility
n <- 6
dat <- data.frame(id=c("s1","s2","s2","s3","s4","s4"),
date=seq.Date(as.Date("2020-12-26"), as.Date("2020-12-31"), "day"),
visit=1:2,
age=sample(18:30, n, replace=TRUE))
#dat
# id date visit age
# 1 s1 2020-12-26 1 18
# 2 s2 2020-12-27 2 22
# 3 s2 2020-12-28 1 18
# 4 s3 2020-12-29 2 26
# 5 s4 2020-12-30 1 27
# 6 s4 2020-12-31 2 21
#desired output:
# id date visit age
# 1 s1 2020-12-26 1 18
# 3 s2 2020-12-28 1 18
# 4 s3 2020-12-29 2 26
# 5 s4 2020-12-30 1 27
【问题讨论】:
-
使用
dplyr:dat %>% group_by(id) %>%slice(which.min(visit)) -
好发现,@RonakShah,我知道某处有骗子......
标签: r dataframe subset multiple-columns