根据前一行(R)中变量的值删除每个唯一标识符的行

根据前一行(R)中变量的值删除每个唯一标识符的行,r,R,我有这种格式的数据 名称 样本日期 场合 A. 01/20 第一 A. 01/21 第二 A. 01/22 第三 A. 01/25 第四 B 01/20 第一 B 01/22 死亡 B NA 第二 B NA 第三 B NA 第四 C 01/22 第一 A数据表选项 > setDT(df)[, .SD[shift(cumsum(Occasion == "Died") == 0, fill = TRUE)], Name] Name SampleDate Occasio

我有这种格式的数据

名称 样本日期 场合 A. 01/20 第一 A. 01/21 第二 A. 01/22 第三 A. 01/25 第四 B 01/20 第一 B 01/22 死亡 B NA 第二 B NA 第三 B NA 第四 C 01/22 第一
A
数据表
选项

> setDT(df)[, .SD[shift(cumsum(Occasion == "Died") == 0, fill = TRUE)], Name]
   Name SampleDate Occasion
1:    A      01/20    First
2:    A      01/21   Second
3:    A      01/22    Third
4:    A      01/25   Fourth
5:    B      01/20    First
6:    B      01/22     Died
7:    C      01/22    First

基本R选项

subset(
  df,
  ave(Occasion == "Died",
    Name,
    FUN = function(x) c(TRUE, (cumsum(x) == 0)[-length(x)])
  )
)
给予

数据

> dput(df)
structure(list(Name = c("A", "A", "A", "A", "B", "B", "B", "B",
"B", "C"), SampleDate = c("01/20", "01/21", "01/22", "01/25",
"01/20", "01/22", NA, NA, NA, "01/22"), Occasion = c("First",
"Second", "Third", "Fourth", "First", "Died", "Second", "Third",
"Fourth", "First")), class = "data.frame", row.names = c(NA,
-10L))

带有
tidyverse

library(dplyr)
df %>% 
    filter(!is.na(SampleDate))
-输出

#   Name SampleDate Occasion
#1    A      01/20    First
#2    A      01/21   Second
#3    A      01/22    Third
#4    A      01/25   Fourth
#5    B      01/20    First
#6    B      01/22     Died
#7    C      01/22    First
数据
df
#   Name SampleDate Occasion
#1    A      01/20    First
#2    A      01/21   Second
#3    A      01/22    Third
#4    A      01/25   Fourth
#5    B      01/20    First
#6    B      01/22     Died
#7    C      01/22    First
df <- structure(list(Name = c("A", "A", "A", "A", "B", "B", "B", "B",
"B", "C"), SampleDate = c("01/20", "01/21", "01/22", "01/25",
"01/20", "01/22", NA, NA, NA, "01/22"), Occasion = c("First",
"Second", "Third", "Fourth", "First", "Died", "Second", "Third",
"Fourth", "First")), class = "data.frame", row.names = c(NA,
-10L))