我如何取出每个科目ID的前两行

阿米尔

我有一个看起来像下面的数据。我想通过获取每个主题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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章