r - 我需要 R 在找到条件 = T 时开始过滤行

标签 r date conditional-statements subset

我在 R 中有一个数据集,如下所示:

id     species date
obs01  FALSE   28/12/2009
obs01  FALSE   14/11/2010
obs01  FALSE   31/12/2010
obs01  TRUE    17/11/2011
obs01  FALSE   10/12/2011
obs01  FALSE   30/12/2011
obs01  FALSE   16/12/2012
obs01  FALSE   17/12/2012
obs01  FALSE   2/11/2013
obs01  FALSE   10/11/2013
obs01  TRUE    11/11/2013       
obs01  FALSE   20/11/2013

我需要从第一个 TRUE 开始的数据集作为输出。像这样的事情(从 2011 年 11 月 17 日开始):

id     species date
obs01  TRUE    17/11/2011
obs01  FALSE   10/12/2011
obs01  FALSE   30/12/2011
obs01  FALSE   16/12/2012
obs01  FALSE   17/12/2012
obs01  FALSE   2/11/2013
obs01  FALSE   10/11/2013
obs01  TRUE    11/11/2013       
obs01  FALSE   20/11/2013

知道如何做到这一点吗?谢谢!

最佳答案

一种选择是使用 cumsum 创建一个过滤器

library(dplyr)
df1 %>%
   group_by(id) %>%
   filter(cumsum(species) >0)
# A tibble: 9 x 3
# Groups:   id [1]
#  id    species date      
#  <chr> <lgl>   <chr>     
#1 obs01 TRUE    17/11/2011
#2 obs01 FALSE   10/12/2011
#3 obs01 FALSE   30/12/2011
#4 obs01 FALSE   16/12/2012
#5 obs01 FALSE   17/12/2012
#6 obs01 FALSE   2/11/2013 
#7 obs01 FALSE   10/11/2013
#8 obs01 TRUE    11/11/2013
#9 obs01 FALSE   20/11/2013

或者正如@r2evans提到的cumany可以使用

df1 %>%
   group_by(id) %>%
   filter(cumany(species))

注意:不清楚原始数据中是否会有很多“id”并且需要分组。如果不是,则删除 group_by(id) 步骤

数据

df1 <- structure(list(id = c("obs01", "obs01", "obs01", "obs01", "obs01", 
"obs01", "obs01", "obs01", "obs01", "obs01", "obs01", "obs01"
), species = c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, FALSE), date = c("28/12/2009", "14/11/2010", 
"31/12/2010", "17/11/2011", "10/12/2011", "30/12/2011", "16/12/2012", 
"17/12/2012", "2/11/2013", "10/11/2013", "11/11/2013", "20/11/2013"
)), class = "data.frame", row.names = c(NA, -12L))

关于r - 我需要 R 在找到条件 = T 时开始过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58509789/

相关文章:

r - R 中带有 LASSO 正则化的序数逻辑回归(或 Beta 回归)?

c# - 使用代码将日期分配给 TextBox textmode ="date"

php - 如何处理日期的不良数据?

haskell - 将用户输入(整数)转换为条件打印语句

r - setorder 丹麦字母或数据表中字母的自定义排序

r - 如何标记由 ggplot2 组成的分位数-分位数图的点?

r - 按日期范围分组

loops - x86_64 - 汇编 - 循环条件和乱序

r - 选择 R 中第一个值等于 "x"的组

r - 伪对数变换仍然会从图中删除 0,如何避免?