为 R 中的二项式值的连续序列分配唯一标识符

如何解决为 R 中的二项式值的连续序列分配唯一标识符

我有一个包含由 0 和 1 序列组成的列的数据框。 0 不重要,但 1 表示时间序列中发生的事件,目标是为每个事件分配一个唯一值。简单的整数值就足够了。所以在下面的代码中,“x”是我所拥有的,“目标”是我所追求的。

这看起来很简单,但我不太知道如何在帮助搜索中表达这个问题...

我所拥有的数据框:

x <- c(rep(0,4),rep(1,5),rep(0,2),10),3))

x <- data.frame(x)

我想要的数据帧:

x$goal <- c(rep(0,rep(2,rep(3,3))

解决方法

这实际上是一种游程长度编码,略微扭曲(将 0 归零)。

虽然 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) 解析为 FALSETRUE,当从 integer 中减去时,分别被强制为 0L1L .我需要这个的原因:如果 0 中有 $out,那么 match 将有效地为 match(0,0:6),它将返回 1。我们希望 x == 0 匹配为 0L,因此我们必须减去一个。由于第二个参数(来自 sort(unique(.)))总是基于 0(如此处)或基于 1(x$x 中不存在零),因此很容易调整。

如果您确定情况并非如此,并且您不喜欢我附加到 - (.)match(.),那么您可以将其更改为 {{ 1}}。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?