首页 > 解决方案 > 过滤R中的第一行

问题描述

我想filter()使用dplyr. 我的意思是,我会从过滤中获得许多满足相同标准的行,但我只想保留第一个,而不进一步重复group()and distinct()。可能吗?

我需要从数据框中提取第一个日期戳和第一个显示为“坏”的日期戳。

problem = data.frame(
  Status = c("Good",  "Good",  "Bad", "Bad", "Bad"),
  Date_entry = c(as.Date("2000-01-01"), as.Date("2000-01-02"), as.Date("2000-01-03"), as.Date("2000-01-04"),as.Date("2000-01-05")),
  Date_status = c(as.Date("1999-01-01"), as.Date("1999-01-01"), as.Date("1999-01-02"), as.Date("1999-01-02"), as.Date("1999-01-02")),
  Value = c(150,20,14,96,04))

我可以filter(Date == min(Date)),但我不知道如何准确过滤掉第一个“坏”结果。我试过filter(Date_entry== min(Date_entry) | (Date_status - Date_entry) == min(Date_status - Date_entry))但还是不行

solution = 
  data.frame(Status = c("Good", "Bad"),
             Date_entry = c(as.Date("2000-01-01"), as.Date("2000-01-02")),
             Date_status = c(as.Date("1999-01-01"), as.Date("1999-01-02")),
             Value = c(150,20))
             

标签: rfilterdplyr

解决方案


我认为你所要求的可以解决

problem %>% 
  filter(Date_entry==min(Date_entry) | cumsum(Status=="Bad")==1)

这里我们选择最小日期,或者我们使用cumsum(累积和)技巧选择 Bad 的第一个值。每次观察到“Bad”时,此数字都会增加 1,因此我们只需选择等于 1 的行(如果存在)。


推荐阅读