gpt4 book ai didi

R,根据单独列中的值删除前一行

转载 作者:行者123 更新时间:2023-12-04 08:44:00 25 4
gpt4 key购买 nike

我是 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())

最佳答案

这是否有效:

> library(dplyr)
> df %>% group_by(Cust_ID) %>% filter(row_number() >= min(which(Value == 'A')))
# A tibble: 8 x 3
# Groups: Cust_ID [2]
Cust_ID Date Value
<dbl> <chr> <chr>
1 500219 2016-04-12 16:00:00 A
2 500219 2016-04-14 11:00:00 A
3 500219 2016-04-15 12:00:00 B
4 500219 2016-05-23 09:00:00 B
5 500219 2016-05-02 19:00:00 C
6 500220 2016-04-15 12:00:00 A
7 500220 2016-05-23 09:00:00 A
8 500220 2016-05-02 19:00:00 A
>

关于R,根据单独列中的值删除前一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64425332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com