【发布时间】:2020-10-19 10:16:05
【问题描述】:
我是 R 新手。我正在尝试根据另一列设置的条件删除之前的行。
我找到了带有 dplyr 和 data.table 的解决方案,我相信它们与我正在寻找的东西很接近,因为它们正好相反。
样本数据:
Cust_ID | Date | Value
500219 | 2016-04-11 12:00:00 | 0
500219 | 2016-04-12 16:00:00 | A
500219 | 2016-04-14 11:00:00 | A
500219 | 2016-04-15 12:00:00 | B
500219 | 2016-05-23 09:00:00 | B
500219 | 2016-05-02 19:00:00 | C
500220 | 2016-04-11 12:00:00 | C
500220 | 2016-04-14 11:00:00 | C
500220 | 2016-04-15 12:00:00 | A
500220 | 2016-05-23 09:00:00 | A
500220 | 2016-05-02 19:00:00 | A
对于每个 Cust_ID,我只想保留 Value == "A" 之后的行,包括该行。这应该会产生以下数据框:
Cust_ID | Date | Value
500219 | 2016-04-12 16:00:00 | A
500219 | 2016-04-14 11:00:00 | A
500219 | 2016-04-15 12:00:00 | B
500219 | 2016-05-23 09:00:00 | B
500219 | 2016-05-02 19:00:00 | C
500220 | 2016-04-15 12:00:00 | A
500220 | 2016-05-23 09:00:00 | A
500220 | 2016-05-02 19:00:00 | A
这些是我已经找到的解决方案 (R delete rows based on values in previous rows)
library(data.table)
setDT(df1)[df1[, if(any(Value == "A")) .I[seq(max(which(Value == "A")))]
else .I[1:.N] , by = Cust_ID]$V1]
library(dplyr)
df1 %>%
group_by(Cust_ID) %>%
slice(if(any(Value=="A")) seq(max(which(Value=="A"))) else row_number())
【问题讨论】:
-
每个组里总有一些
value == "A"吗? -
是的,但这可能会随着数据集的更新而改变。
标签: r dplyr data.table