筛选R中的第一行

筛选R中的第一行,r,filter,dplyr,R,Filter,Dplyr,我想使用dplyr中的filter()函数保留第一个观察结果。我的意思是,我会从筛选中获得许多满足相同条件的行,但我只想保留第一行,而不需要进一步重复使用group()和distinct()。可能吗 我需要从数据帧中提取第一个日期戳和第一个显示为“坏”的日期戳 我可以过滤(Date==min(Date))但是我不知道如何准确地过滤出第一个“坏”结果。 我尝试了过滤器(Date_entry==min(Date_entry)|(Date_status-Date_entry)==min(Date_st

我想使用
dplyr
中的
filter()
函数保留第一个观察结果。我的意思是,我会从筛选中获得许多满足相同条件的行,但我只想保留第一行,而不需要进一步重复使用
group()
distinct()
。可能吗

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

我可以
过滤(Date==min(Date))
但是我不知道如何准确地过滤出第一个“坏”结果。 我尝试了
过滤器(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))
             
像这样的

library(dplyr)
df <- data.frame(A=c(1,1,1,1,1,2,2,2,2,2),
                 B=c(1,2,3,4,5,1,2,3,4,5))
head(df %>% filter(A==1),1)
库(dplyr)
df%过滤器(A==1),1)

我想你的要求可以用

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

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

带有
切片的选项

library(dplyr)
problem %>%
   slice(union(which.min(Date_entry), match('Bad', Status)))
-输出

#  Status Date_entry Date_status Value
#1   Good 2000-01-01  1999-01-01   150
#2    Bad 2000-01-03  1999-01-02    14

如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,那么就更容易为您提供帮助。也许您只需要
slice(1)
?它可以在filter()中使用吗?它将在
filter()之后使用。但从你的描述来看,你的确切意思有点不清楚。同样,一个可重复的例子会让事情变得更清楚。您可以使用
过滤器(row_number()==1)
,但如果您可以放松“使用
过滤器
功能”的要求,这就是
切片
的目的。或者
head(1)
也可以。哦,我明白了-再次阅读您的问题似乎您有一些条件,您只需要满足该条件的第一行。一个可复制的例子会让这更清楚。。。
#  Status Date_entry Date_status Value
#1   Good 2000-01-01  1999-01-01   150
#2    Bad 2000-01-03  1999-01-02    14