gpt4 book ai didi

r - 删除特定列中特定值序列之后的行

转载 作者:行者123 更新时间:2023-12-04 10:56:50 25 4
gpt4 key购买 nike

a <- c("A","A","A","B","B","B","C","C","C","C","D","D","D","D","D")
b <- c("x","y","z","x","x","z","y","z","z","z","y","z","z","z","x")
df = data.frame(a,b)


a b
1 A x
2 A y
3 A z
4 B x
5 B x
6 B z
7 C y
8 C z
9 C z
10 C z
11 D y
12 D z
13 D z
14 D z
15 D x

对于每个组 A、B、C、D,每次组合 y,z 出现在组末尾时,我都想删除 b 列中的值 z。

如果我们有 a=="C"的情况,其中 b 值是 y,z,z,z,我想删除所有 z。但是,在 a=="D"中,x 是最后一个值,因此无需更改任何内容。

结果如下所示:
    a   b
1 A x
2 A y
4 B x
5 B x
6 B z
7 C y
11 D y
12 D z
13 D z
14 D z
15 D x

通过在 dplyr 中分组,我可以识别 A 中每个值的最后一次出现,因此在 a=="A" 中描述的基本情况不是问题。我很难为 a=="C" 的情况找到解决方案,我可以有 1 次 y 出现,然后是 20 次 z 出现。

最佳答案

您可以使用 bycummin在基础 R 中:

df[unlist(by(df$b, interaction(df$a), FUN = function(x) {
tmp <- rev(cummin(rev(x == "z")))
if (tail(x[!tmp], 1) == "y") !tmp else rep(TRUE, length(x))
})), ]

结果:
   a b
1 A x
2 A y
4 B x
5 B x
6 B z
7 C y
11 D y
12 D z
13 D z
14 D z
15 D x

关于r - 删除特定列中特定值序列之后的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28938764/

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