r - 使用 r 中其他两列的 group_by 计算行数
问题描述
我有如下数据。我想添加一个新列,该列在列code
更改时计数,并且在ID
更改时重置并计数器为 1 并开始计数。
ID code
1 10
1 10
1 11
1 11
1 21
1 21
2 10
2 10
2 11
2 11
2 11
2 14
2 15
结果:
ID code counter
1 10 1
1 10 1
1 11 2
1 11 2
1 21 3
1 21 3
2 10 1
2 10 1
2 11 2
2 11 2
2 11 2
2 14 3
2 15 4
解决方案
我们可以使用cumsum
with duplicated
as in
df %>% group_by(ID) %>% mutate(counter = cumsum(!duplicated(code)))
# A tibble: 13 x 3
# Groups: ID [2]
# ID code counter
# <int> <int> <int>
# 1 1 10 1
# 2 1 10 1
# 3 1 11 2
# 4 1 11 2
# 5 1 21 3
# 6 1 21 3
# 7 2 10 1
# 8 2 10 1
# 9 2 11 2
# 10 2 11 2
# 11 2 11 2
# 12 2 14 3
# 13 2 15 4
如果code
从 11 恢复到 10,则counter
不会增加。但我想这在你的情况下是不可能的,或者这甚至是预期的效果。
以下是duplicated
在这种情况下的工作原理:
cbind(df[df$ID == 1, "code"], !duplicated(df[df$ID == 1, "code"]))
# [,1] [,2]
# [1,] 10 1
# [2,] 10 0
# [3,] 11 1
# [4,] 11 0
# [5,] 21 1
# [6,] 21 0
每当出现新值时code
,它都会给出一个,然后cumsum
完成工作。
推荐阅读
- r - 当间隔穿过午夜时按日期对持续时间进行分组
- excel - 有条件地重构重复的 csv 索引
- kdb - KDB - 文本解析和分类文本数据
- r - 用 1 替换值,用 0 替换空单元格以生成热图?
- cucumber - 黄瓜支持被禁用,因为缺少“黄瓜导轨”宝石或黄瓜导轨插件
- c# - PictureBox 不释放资源
- javascript - JavaScript:如何优化基于贪心算法运行的团队平衡程序?
- macos - 在 OSX 10.12 上升级 ffmpeg(或 rust)找不到 make
- firebase - 当用户通过从概览窗口滑动关闭应用程序时,Firebase 会处理未完成的下载
- python - 用 manim 库画线?