根据前一行(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 第一根据前一行(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
数据表
选项
> 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))