【问题标题】:Subset a data set for only new individuals after a certain time (R)在特定时间 (R) 后仅针对新个体的数据集子集
【发布时间】:2014-12-10 01:41:24
【问题描述】:

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

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

【问题讨论】:

  • 请展示一个小的示例数据集以更好地理解问题。
  • 您是指出现在2008-2012 而不是2000-2007 的个人吗?
  • 是的,出现在 2008-2012 但不是 2000-2007 的个人
  • 我的代码适用于您展示的示例。请在我的帖子中查看Update2

标签: r subset


【解决方案1】:

如果你有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))

更新2

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

【讨论】:

    【解决方案2】:

    首先,我会确保您的日期字段被格式化为日期字段。 一旦完成,有很多方法可以做到。

    一种方法是根据特定日期进行子集化:

    foo &lt;- bar[bar$date&gt;as.Date("2008-01-01") &amp; bar$date&lt;as.Date("2012-12-31"),]

    您还可以提取年份,并将其另存为附加列,作为纯数字,然后使用它。我认为第一种方式给你更多的灵活性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2021-06-08
      • 2018-08-01
      • 1970-01-01
      • 2016-02-15
      • 2019-11-20
      相关资源
      最近更新 更多