首页 > 解决方案 > 在R中按组条件进行子集化

问题描述

我有一个看起来有点像这样的数据集

id     year
 1     2012
 1     2014
 1     2015
 2     2014
 2     2018
 2     2019
 3     2011
 4     2010

我只想根据这两个条件(1)每个 id 进行一次观察,(2)该 id 的最新年份。因此,例如,对于 id 1,我只想要 2015 行,对于 id 2,我只想要 2019 行,对于 id 3 和 4,我在这两年中只有一个观察结果,所以只保留它们。

我尝试了一些不同的方法,例如:

df1<-subset(df, interaction(df$id, max(df$year)))

我知道这个子集没有意义,但我只是在编造一些东西,希望在我的脑海中有些东西是有意义的。我试过的另一个,

lapply(unique(df$id), function(max) subset(df, mac(year)))

但我不断收到错误。

任何帮助将不胜感激!先感谢您。

标签: rsubset

解决方案


您应该分组然后过滤

df %>%
  group_by(id) %>%
  filter(year == max(year)) %>%
  ungroup()

与@akrun 提出的切片解决方案不同,这将返回每个 id 的年份为最大值的所有行。这取决于您的需求。


推荐阅读