我的数据框包含一段时间内许多人的信息。新的个体会在出现时添加到数据框中。
我想在一段时间内对数据框进行子集化,以便只显示新的个体。 例如。 2000 - 2012年的数据框架。 2008 - 2012年的子集,仅包括出现在2008 - 2012年而非2000 - 2008年的个人
更多信息:
我的数据集看起来有点像这样
数据
id date score
43 2006 15
12 2011 15
12 2007 16
14 2011 17
14 2011 14
14 2012 14
我想要进行分组,以便只包括2008年之后首次出现的id。 即在上面的例子中,只包括id = 14,因为所有分数都发生在2008年之后。不会包括id = 12,因为2008年之前出现了一个分数
答案 0 :(得分:0)
首先,我会确保您的日期字段被格式化为日期字段。 一旦完成,有很多方法可以做到。
一种方法是根据具体日期进行分组:
foo <- bar[bar$date>as.Date("2008-01-01") & bar$date<as.Date("2012-12-31"),]
您还可以提取年份,并将其作为附加列保存为普通数字,然后使用它。我认为第一种方式可以为您提供更大的灵活性。
答案 1 :(得分:0)
如果您有date
列
Year <- as.numeric(format(datN$Date, "%Y"))
indx <- Year %in% 2008:2012
datN[indx,][!datN$ID[indx] %in% datN$ID[!indx],]
# ID Date
#4 11 2009-02-09
#17 4 2012-02-14
#19 11 2009-08-23
#40 20 2010-11-20
set.seed(24)
datN <- data.frame(ID= sample(1:20, 50, replace=TRUE),
Date=sample(seq(as.Date('2000-01-01'), as.Date('2012-12-31'), by=1), 50, replace=FALSE))
indx <- dat$date %in% 2008:2012
dat[indx,][!dat$id[indx] %in% dat$id[!indx],]
# id date score
#4 14 2011 17
#5 14 2011 14
#6 14 2012 14
dat <- structure(list(id = c(43L, 12L, 12L, 14L, 14L, 14L), date = c(2006L,
2011L, 2007L, 2011L, 2011L, 2012L), score = c(15L, 15L, 16L,
17L, 14L, 14L)), .Names = c("id", "date", "score"), class = "data.frame", row.names = c(NA,
-6L))