r - R:计算单个列和按组中连续出现的值
问题描述
我正在尝试创建一个连续数量的相等值,即出现次数。但是,我希望在引入新 ID 后重置计数,即使该行保持连续。
我的数据的示例:
dataset <- data.frame(ID =
c("a","a","a","a","a","a","a","b","b","b","b","b","b","b")
dataset$YesNO <- c(1,1,0,0,0,1,1,1,1,1,0,0,0,0)
所以我想创建一个新列,结果如下:
c(1,2,1,2,3,1,2,1,2,3,1,2,3,4)
我使用了在这个论坛上找到的这段代码:
dataset$Counter <- sequence(rle(as.character(dataset$YesNo))$lengths)
但是,这不会重置新 ID 号的计数。相反,顺序计数继续,结果输出为:
c(1,2,1,2,3,1,2,3,4,5,1,2,3,4)
我缺少哪个步骤来根据 ID 重置它。
谢谢!
解决方案
使用rleid
(来自 data.table 包)获取分组变量,然后ave
用于seq_along
在该分组的公共值中应用:
library(data.table)
transform(dataset, Counter = ave(YesNO, rleid(ID, YesNO), FUN = seq_along))
给予:
ID YesNO Counter
1 a 1 1
2 a 1 2
3 a 0 1
4 a 0 2
5 a 0 3
6 a 1 1
7 a 1 2
8 b 1 1
9 b 1 2
10 b 1 3
11 b 0 1
12 b 0 2
13 b 0 3
14 b 0 4
推荐阅读
- footer - 仅在商店页面上禁用页脚(插入页眉和页脚插件)
- java - 如何在更改用户密码时重新配置 SpringBoot 的内存认证?
- python - Raspberry pi 上的 Python sounddevice 输入流失败
- python - 类型错误:__call__() 缺少 1 个必需的位置参数:“发送”Django
- r - 是否存在将 heredocs 放置在 r 脚本中的方法?(这大大简化了嵌入 sql 查询)
- python - qmainwindow() 最多接受 2 个参数(给定 3 个) - 尝试使用 QtUiTools.QUiLoader() 从加载 .ui 文件中继承类 QMainWindow
- node.js - 使用 puppeteer 下载文件不会将文件存储在谷歌云功能的 /tmp 文件夹中
- php - LARAVEL 7 中的多文件输入
- html - 将输入与表格列对齐
- sql-server - 从sql中的日期时间字段中提取月份