我的数据框包含针对个人的第1周和第12周课程调查结果,有些人已经像下面的学生#100一样参加了第一周的调查两次。除了示例中显示的向量之外,df中还有其他向量,但我想删除这些个体的最早的观测值。
St# Week Date
100 1 15-Jun
100 1 18-Jun
100 12 25-Aug
101 1 17-Jun
101 12 25-Aug
102 12 26-Aug 另外,如果学生只上了1周或12周的课,比如学生#102,我如何删除观察结果?
提前感谢
发布于 2014-02-18 00:51:35
以下是data.table和plyr解决方案。
dat <- read.table(text = "St Week Date
100 1 15-Jun
100 1 18-Jun
100 12 25-Aug
101 1 17-Jun
101 12 25-Aug
102 12 26-Aug ", header = TRUE, stringsAsFactors = FALSE)
dat$Date <- as.Date(paste(dat$Date, "2014"), format = "%d-%b %Y")
library(data.table)
DT <- data.table(dat)
DT[order(Date), head(.SD, 1), by = list(St, Week)][duplicated(St) | duplicated(St, fromLast = TRUE)]
## St Week Date
## 1: 100 1 2014-06-15
## 2: 101 1 2014-06-17
## 3: 100 12 2014-08-25
## 4: 101 12 2014-08-25
library(plyr)
out <- ddply(dat, .(St, Week), function(x) head(x[order(x$Date),], 1) )
out[duplicated(out$St) | duplicated(out$St, fromLast = TRUE),]
## St Week Date
## 1 100 1 2014-06-15
## 2 100 12 2014-08-25
## 3 101 1 2014-06-17
## 4 101 12 2014-08-25https://stackoverflow.com/questions/21834370
复制相似问题