gpt4 book ai didi

r - 对满足字符串条件的连续行进行子集化

转载 作者:行者123 更新时间:2023-12-01 12:13:32 30 4
gpt4 key购买 nike

我有一个包含 3 列和数百行的数据框。特定列包含三个字符串之一:“Open”、“Close”、“Cancel”

    type    unique_id   group
1 Open 11468329881 g_2
2 Close 11468329881 g_2
3 Open 23254429881 g_3
4 Cancel 23254429881 g_3
5 Open 32550829881 g_4
6 Close 32550829881 g_4
7 Open 43254429881 g_5
8 Close 43254429881 g_5
9 Open 52627629881 g_6
10 Close 52627629881 g_6
11 Open 62747029881 g_7
12 Close 62747029881 g_7
13 Open 2499619881 g_8
14 Close 2499619881 g_8
15 Open 32975019881 g_9
16 Close 32975019881 g_9
17 Open 42975119881 g_10
18 Cancel 42975119881 g_10
19 Open 53560019881 g_11
20 Open 53560019881 g_11
21 Open 62521619881 g_12
22 Close 62521619881 g_12
23 Open 72663719881 g_13
24 Close 72663719881 g_13
25 Open 82663819881 g_14
26 Close 82663819881 g_14
27 Open 92747019881 g_15
28 Open 92747019881 g_15
29 Open 1499629881 g_15
30 Close 1499629881 g_15

我想遍历每个组(例如:g_1g_2),如果订单是“打开”、“关闭”或“打开”,则对行进行子集化""取消"任何其他订单都应被忽略。

例如g_2应该子集

    type    unique_id   group
1 Open 11468329881 g_2
2 Close 11468329881 g_2

g_11应该被忽略,因为订单是“打开”“打开”

g_15 应该子集

    type    unique_id   group
29 Open 1499629881 g_15
30 Close 1499629881 g_15

如有任何帮助,我们将不胜感激。

编辑:如果我之前不清楚,我深表歉意。对于下面给出的示例,建议的解决方案不适用于 g_8

Open    21921312463 g_1
Close 21921312463 g_1
Open 31032312463 g_2
Close 31032312463 g_2
Open 41032212463 g_3
Close 41032212463 g_3
Open 51032312463 g_4
Close 51032312463 g_4
Open 61032212463 g_5
Close 61032212463 g_5
Open 71032312463 g_6
Close 71032312463 g_6
Open 81032212463 g_7
Close 81032212463 g_7
Open 21921312463 g_8
Open 21921312463 g_8
Close 21921312463 g_8
Open 31032312463 g_9
Close 31032312463 g_9
Open 41032212463 g_10
Close 41032212463 g_10
Open 51032312463 g_11
Close 51032312463 g_11
Open 61032212463 g_12
Close 61032212463 g_12
Open 71032312463 g_13
Close 71032312463 g_13
Open 81032212463 g_14
Close 81032212463 g_14

我希望过滤 g_8 以提供

Open    21921312463 g_8
Close 21921312463 g_8

并忽略组中的第一行

最佳答案

按“组”分组后,通过检查 所有 vector 中的元素来过滤行(c("Open ", "Close")) 或 | 在另一个向量 (c("Open", "Cancel")) 中存在 %in % '类型' 列

library(dplyr)
df1 %>%
group_by(group) %>%
#group_by(group, unique_id) %>%
filter(all(c("Open", "Close") %in% type)| all(c("Open", "Cancel") %in% type))

如果分组变量包含“unique_id”,则将 group_by 行更新为 group_by(group, unique_id)

更新

根据更新后的数据集和新的逻辑,我们检查下一个值是“关闭”还是“取消”

df2 %>% 
group_by(group, unique_id) %>%
mutate(ind = which(type == "Open" & lead(type) %in% c("Close", "Cancel"))[1]) %>%
filter(!is.na(ind)) %>%
slice(ind[1]:(ind[1]+1)) %>%
select(-ind)

关于r - 对满足字符串条件的连续行进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49893720/

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