仅选择最后日期存在的行

时间:2018-05-04 03:42:53

标签: r

假设我有以下数据。

df = data.frame(name = c("A","A","A","B","B","B","B"),
                date = c("2011-01-01","2011-03-01","2011-05-01",
                         "2011-01-01","2011-05-01","2011-06-01",
                         "2011-07-01"))
df

我知道数据集中的最后一个日期,并且只想选择那些数据可用于最后日期的名称。所以在上面的例子中,最后一个日期仅适用于名称B.因此,我只想选择名称B的行。

我可以做这样的简单黑客来获得理想的结果。

last_date = "2011-07-01"

#unique(df$name[df$date %in% last_date])
df[df$name %in% unique(df$name[df$date %in% last_date]),]

但是,我想知道是否有针对此任务的dplyr / tidyverse或data.table解决方案。

1 个答案:

答案 0 :(得分:3)

有多种方法可以执行此操作,dplyr我们只能过滤那些last_date

的群组
library(dplyr)
df %>%
  group_by(name) %>%
  filter(last_date %in% date)

#  name  date      
#  <fct> <fct>     
#1 B     2011-01-01
#2 B     2011-05-01
#3 B     2011-06-01
#4 B     2011-07-01

或类似地在基地R:

df[ave(df$date, df$name, FUN = function(x) last_date %in% x) == TRUE,]

此外,我们可以获取您找到name的所有last_date,并从原始数据框中过滤这些name

df[with(df, name %in% name[date %in% last_date]), ]