gpt4 book ai didi

r - 基于另一列在 DF 上创建迭代器

转载 作者:行者123 更新时间:2023-12-01 09:40:50 25 4
gpt4 key购买 nike

我有一个这样的 df:

A      B
0 0
0 0
0 0
0 1
0 1
0 2
0 3
0 3
1 0
1 0
1 1
1 1
2 0
2 1
2 2

我需要一个带有迭代器的新列 C,它计算 B 列中值的出现次数。

这正是我需要的:

    A      B   C
0 0 1
0 0 2
0 0 3
0 1 1
0 1 2
0 2 1
0 3 1
0 3 2
1 0 1
1 0 2
1 1 1
1 1 2
2 0 1
2 1 1
2 2 1

C 的前 3 行是 1-2-3,因为在 B 中我们有 3 行值为 0,然后是 2 行 C 的值为 1-2,因为我们在 B 中有两行值为 1,等等...

我尝试过这样的事情:

 DF$C <- ifelse(DF$B == 0 , 1:length(DF),1:length(DF))

但实际上它对大于 0 的值不起作用,并且不能很好地控制它。我需要一些 for 循环来检查 col B 并创建 col C 迭代它。

希望问题很清楚。提前谢谢你。

最佳答案

您可以使用运行长度编码 (rle) 来获取连续匹配的长度,然后只需 seq 每个长度在 lapply 之前将其取消列出。

DF$C <- unlist(lapply(rle(DF$B)$lengths, seq))

DF
#> A B C
#> 1 0 0 1
#> 2 0 0 2
#> 3 0 0 3
#> 4 0 1 1
#> 5 0 1 2
#> 6 0 2 1
#> 7 0 3 1
#> 8 0 3 2
#> 9 1 0 1
#> 10 1 0 2
#> 11 1 1 1
#> 12 1 1 2
#> 13 2 0 1
#> 14 2 1 1
#> 15 2 2 1

关于r - 基于另一列在 DF 上创建迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60526974/

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