【问题标题】:Removing data after different start date based on id [duplicate]根据 id [重复] 在不同的开始日期之后删除数据
【发布时间】:2021-11-21 01:43:12
【问题描述】:

我有一个包含namedateearliest_date 的数据集,其中一些name 会有earliest_date。现在我想删除基于nameearliest_date 之后的所有数据。并忽略那些在earliest_date 中有NA 的人。并且不同的name 将有不同的earliest_date,我很确定我不能使用带有固定日期的filter()。任何帮助都会非常有用。

部分数据如下:

dput(mydata[1:10,])
structure(list(name = c("a", "b", "c", 
"d", "e", "f", "g", 
"a", "h", "i"), Date = structure(c(13214, 
17634, 15290, 18046, 16326, 18068, 10234, 12647, 15485, 15182
), class = "Date"), earliest_date = structure(c(12647, NA, NA, 
NA, NA, NA, NA, 12647, NA, 15552), class = "Date")), row.names = c(NA, 
10L), class = "data.frame")


期望的输出: 第一行将被删除为Dateearliest_date之后记录的@

dput(mydata[2:10,])
structure(list(name = c("b", "c", 
"d", "e", "f", "g", 
"a", "h", "i"), Date = structure(c(17634, 15290, 
18046, 16326, 18068, 10234, 12647, 15485, 15182), class = "Date"), 
    earliest_date = structure(c(NA, NA, NA, NA, NA, NA, 12647, 
    NA, 15552), class = "Date")), row.names = 2:10, class = "data.frame")

【问题讨论】:

  • mydata %>% filter(Date < earliest_date | is.na(earliest_date)) 可能给你你想要的,但是如果没有你想要的输出(也许还有更复杂的输入数据),就不可能确定。 PS:使用 R 函数、类或其他对象的名称命名变量是不好的做法。
  • 我已经为参考添加了一个期望输出,现在我认为我需要的只是删除基于earliest_date 之后Date 的所有行name?但我还没弄明白代码

标签: r


【解决方案1】:

这可能会有所帮助

mydata %>%
  filter(is.na(earliest_date) | Date<=earliest_date)

  name       Date earliest_date
1    b 2018-04-13          <NA>
2    c 2011-11-12          <NA>
3    d 2019-05-30          <NA>
4    e 2014-09-13          <NA>
5    f 2019-06-21          <NA>
6    g 1998-01-08          <NA>
7    a 2004-08-17    2004-08-17
8    h 2012-05-25          <NA>
9    i 2011-07-27    2012-07-31

【讨论】:

    【解决方案2】:

    或者试试:

    library(data.table)
    setDT(mydata)[is.na(mydata$earliest_date) | mydata$Date<=earliest_date,]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多