在一定时间后(R)仅为新个体设置数据集

时间:2014-10-15 04:58:17

标签: r subset

我的数据框包含一段时间内许多人的信息。新的个体会在出现时添加到数据框中。

我想在一段时间内对数据框进行子集化,以便只显示新的个体。 例如。 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年之前出现了一个分数

2 个答案:

答案 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))

UPDATE2

 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))