繁体   English   中英

从r data.frame中的每个因子级别删除前N行

[英]Remove the first N rows from each factor level in an r data.frame

使用下面的dat 如何创建包含除每个IndID的前五行之外的所有值的新数据框子集? 换句话说,我想要排除每个IndID的前5行的新数据帧。

set.seed(123)
dat <- data.frame(IndID = rep(c("AAA", "BBB", "CCC", "DDD"), each  = 10),
                  Number = sample(1:100,40))

我已经看过一些选择数据的SO帖子,但我不知道如何删除如上所述。

我们可以使用dplyrslice()功能:

dat %>% 
    group_by(IndID) %>% 
    slice(6:n())

在基数R中, tapply()在使用tail()的行号序列上使用时非常方便。

idx <- unlist(tapply(1:nrow(dat), dat$IndID, tail, -5))
dat[idx, ]

请注意,在unlist() use.names=FALSE会更有效。

使用data.table ,您可以使用tail()执行以下操作。

library(data.table)

setDT(dat)[dat[, tail(.I, -5), by=IndID]$V1]

如果数据已排序,并且保证每组至少有n行......

n = 5
w = match(unique(dat$IndID), dat$IndID)
dat[- (rep(w, each = n) + 1:n - 1L), ]

可以使用splitR分裂dat通过IndID ,除去前5行每个子组的,然后rbind后它。

do.call(rbind, lapply(split(dat,as.character(dat$IndID)), function(x) x[-(1:5),]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM