r - 计算和分配变量的连续出现
问题描述
我希望计算任何值的连续出现并将该计数分配给下一列中的该值。以下是输入和所需输出的示例:
dataset <- data.frame(input = c("a","b","b","a","a","c","a","a","a","a","b","c"))
dataset$count <- c(1,2,2,2,2,1,4,4,4,4,1,1)
dataset
input count
a 1
b 2
b 2
a 2
a 2
c 1
a 4
a 4
a 4
a 4
b 1
c 1
我rle(dataset$input)
可以得到每个值的出现次数。但我想要上述格式的结果输出。
我的问题类似于: R:计算单个列中连续出现的值 但是这里的输出是按顺序排列的,我想将计数本身分配给该值。
解决方案
您可以重复lengths
参数lengths
时间rle
with(rle(dataset$input), rep(lengths, lengths))
#[1] 1 2 2 2 2 1 4 4 4 4 1 1
使用dplyr
,我们可以lag
用来创建组,然后计算每个组中的行数。
library(dplyr)
dataset %>%
group_by(gr = cumsum(input != lag(input, default = first(input)))) %>%
mutate(count = n())
与data.table
library(data.table)
setDT(dataset)[, count:= .N, rleid(input)]
数据
确保input
列是字符而不是factor
。
dataset <- data.frame(input = c("a","b","b","a","a","c","a","a","a","a","b","c"),
stringsAsFactors = FALSE)
推荐阅读
- xpages - 如何从 Domino 中的 URL 获取字符串查询参数
- windows - 批处理脚本中的方框图字符 (Windows CMD)
- r - 无法安装 R 包 - 系统(cmd)中的警告:找不到“make”
- .net-core - 带有 EFCore net Core 3.0 的 Dbcontext 和 Dbset
- tensorflow - 在 Colab 中保存 TensorFlow 编译模型的中断
- reactjs - 使用 react-redux-firebase 在 Firestore 中使用 React 获取参考文档
- python - 使用 Python 如何对通过音频环回发送到扬声器的所有音频进行采样
- uppaal - 检查 Mac OS Catalina 10.15 上的 Uppaal 4.1.23 是否支持 OS 错误
- postgresql - Postgres - dblink_connect 如何设置超时
- php - 如何在php laravel中按经纬度从数据库中查找特定区域?