我有一个看起来像下面的数据。我想通过获取每个主题ID的前两行来对数据进行子集处理,并丢弃其余的数据。我该如何为所有个人做到这一点?
ID TIME CONC
1 0 1
1 5 5
1 7 11
2 0 0.5
2 1 10
2 2 15
提前致谢 !
您可以这样做:
library(dplyr)
library(tidyr)
df %>%
group_by(ID)%>%
slice(1:2)
# ID TIME CONC
#1 1 0 1.0
#2 1 5 5.0
#3 2 0 0.5
#4 2 1 10.0
或使用 data.table
library(data.table)
setDT(df)[, .SD[1:2], by=ID]
# ID TIME CONC
#1: 1 0 1.0
#2: 1 5 5.0
#3: 2 0 0.5
#4: 2 1 10.0
或者
setDT(df)[df[, .I[1:2], by=ID]$V1,]
或使用 base R
df[with(df, ave(seq_along(ID), ID, FUN=seq_along) <3),] #from @John's comments
在这种情况下,您可以将上面的代码缩短为(考虑到这ID
不是一个factor
变量。
df[with(df, ave(ID, ID, FUN=seq_along) <3),]
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L), TIME = c(0L, 5L,
7L, 0L, 1L, 2L), CONC = c(1, 5, 11, 0.5, 10, 15)), .Names = c("ID",
"TIME", "CONC"), class = "data.frame", row.names = c(NA, -6L))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句