r - 为R中的连续二项式值序列分配唯一标识符
问题描述
我有一个数据框,其列由 0 和 1 的序列组成。0 不感兴趣,但 1 表示按时间序列发生的事件,目标是为每个事件分配唯一值。简单的整数值就足够了。所以在下面的代码中,“x”是我所拥有的,“目标”是我所追求的。
这看起来很简单,但我不太知道如何在帮助搜索中表达这个问题......
我有什么作为数据框:
x <- c(rep(0,4),rep(1,5),rep(0,2),rep(1,4),rep(0,10),rep(1,3))
x <- data.frame(x)
我在数据框中想要什么:
x$goal <- c(rep(0,4),rep(1,5),rep(0,2),rep(2,4),rep(0,10),rep(3,3))
解决方案
这实际上是一种游程编码,带有轻微的扭曲(零化0
s)。
虽然data.table::rleid
做得很好,但如果您还没有使用该软件包,那么我们将使用
my_rleid <- function(x) { yy <- rle(x); rep(seq_along(yy$lengths), yy$lengths); }
从这里,我们将看到
x$out <- my_rleid(x$x)
x$out <- ifelse(x$x == 0, 0L, x$out)
x
# x goal out
# 1 0 0 0
# 2 0 0 0
# 3 0 0 0
# 4 0 0 0
# 5 1 1 2
# 6 1 1 2
# 7 1 1 2
# 8 1 1 2
# 9 1 1 2
# 10 0 0 0
# 11 0 0 0
# 12 1 2 4
# 13 1 2 4
# 14 1 2 4
# 15 1 2 4
# 16 0 0 0
# 17 0 0 0
# 18 0 0 0
# 19 0 0 0
# 20 0 0 0
# 21 0 0 0
# 22 0 0 0
# 23 0 0 0
# 24 0 0 0
# 25 0 0 0
# 26 1 3 6
# 27 1 3 6
# 28 1 3 6
这非常接近。如果您需要连续的数字(没有像上面那样的间隙),那么
x$out <- match(x$out, sort(unique(x$out))) - (0 %in% x$out)
x
# x goal out
# 1 0 0 0
# 2 0 0 0
# 3 0 0 0
# 4 0 0 0
# 5 1 1 1
# 6 1 1 1
# 7 1 1 1
# 8 1 1 1
# 9 1 1 1
# 10 0 0 0
# 11 0 0 0
# 12 1 2 2
# 13 1 2 2
# 14 1 2 2
# 15 1 2 2
# 16 0 0 0
# 17 0 0 0
# 18 0 0 0
# 19 0 0 0
# 20 0 0 0
# 21 0 0 0
# 22 0 0 0
# 23 0 0 0
# 24 0 0 0
# 25 0 0 0
# 26 1 3 3
# 27 1 3 3
# 28 1 3 3
我选择使用- (0 %in% x$out)
而不是硬编码的1
原因是我想防止数据中没有 0 的可能性。换句话说,它(0 %in% x$out)
解析为FALSE
or TRUE
,当从integer
s 中减去时,它分别被强制为0L
or 1L
。我需要这个的原因:如果有一个0
in $out
,那么match
实际上match(0, 0:6)
就是 which will return 1
。我们希望x == 0
匹配是0L
,所以我们必须减一。由于第二个参数 (from sort(unique(.))
) 总是从 0 开始(如此处)或从 1 开始(在 中不存在零x$x
),因此调整起来很容易。
如果您确定情况并非如此,并且您不喜欢- (.)
I 附加到match(.)
,那么您可以将其更改为match(.) - 1L
.
推荐阅读
- python - 如何为我自己的用户定义类覆盖用于可变参数函数中的 kwargs 的 `**` 运算符?
- android - 无法从 ImageView 获取位图作为 BitmapDrawable
- android - 从 ROM 获取设备驱动程序
- vue.js - 如何使用 eslint 在所有导入中强制 .vue 扩展?
- google-cloud-platform - 是否可以在不删除的情况下停止 Google Cloud 上的 Kubeflow?
- gnuplot - 我想用整数参数拟合一个函数
- php - 如何通过获取唯一 ID/表 ID 以及数据 CODEIGNITER 来编辑数据库中的列
- mongoose - 猫鼬找到带有 id 的子文档,CoreMongooseArray vs DocumentArray
- php - PHP 命令行:以命令、子命令和参数的形式解析参数的有效方法
- c++ - C++ 蛇不动