筛选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