R如何通过测量与给定值的下一个不间断序列的距离来生成降序序列

标签 r sequence

我花了很多时间试图弄清楚如何创建一个特定于主题的降序序列,并测量与另一列中给定值的下一个不间断序列的距离。你有什么建议吗?

这是问题的一个例子:

给定以下数据,其中“id”列是主题唯一标识符,“dummy”列是一个属性

mydata<-data.frame(id=rep(seq(1,3),each=5), dummy=c(0,0,0,1,1,0,0,1,0,1,0,0,0,0,0)) 

    id dummy
1   1     0
2   1     0
3   1     0
4   1     1
5   1     1
6   2     0
7   2     0
8   2     1
9   2     0
10  2     1
11  3     0
12  3     0
13  3     0
14  3     0
15  3     0

生成一个新列,测量与“虚拟”列中值 1 的下一个不间断序列的距离(注意:我将值 1 的单个出现视为中断序列)。这是输出示例:

    id dummy output
1   1     0      3
2   1     0      2
3   1     0      1
4   1     1      0
5   1     1      0
6   2     0      2
7   2     0      1
8   2     1      0
9   2     0      1
10  2     1      0
11  3     0      0
12  3     0      0
13  3     0      0
14  3     0      0
15  3     0      0

谢谢, H

最佳答案

这是分两步使用 data.table 包的尝试。

第一步是将 dummy 列进一步移动一步,以便随后检查零序列是否紧随其后。

第二步是根据它们是零序列且后跟一的条件来计算序列。

我正在使用最新 data.table 版本 (v 1.9.6+) 中的 shift 函数来完成此任务,但您可以只使用 indx := c(dummy[-1L], 0L) 而不是

library(data.table) # V1.9.6+
setDT(mydata)[, indx := shift(dummy, type = "lead", fill = 0L)]
mydata[, output := .N:1L*(dummy == 0L)*(indx[.N] == 1L), by = .(id, cumsum(dummy == 1L))]
#     id dummy indx output
#  1:  1     0    0      3
#  2:  1     0    0      2
#  3:  1     0    1      1
#  4:  1     1    1      0
#  5:  1     1    0      0
#  6:  2     0    0      2
#  7:  2     0    1      1
#  8:  2     1    0      0
#  9:  2     0    1      1
# 10:  2     1    0      0
# 11:  3     0    0      0
# 12:  3     0    0      0
# 13:  3     0    0      0
# 14:  3     0    0      0
# 15:  3     0    0      0

关于R如何通过测量与给定值的下一个不间断序列的距离来生成降序序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637675/

相关文章:

perl - 如何使用 Class::DBI->sequence() 方法在 perl 中自动填充 'id' 字段?

python - 根据序列中缺失的数字拆分列表

postgresql - 我如何使用变量创建或更新 postgresql 序列

xml - R:将节点插入特定位置的xml树

r - 使用神经网络预测新数据的类别

r - glmnet 模型性能与 boosting 算法的比较

R vroom导入包-关闭连接

swift - Swift 'compactMap' Sequence 方法的时间复杂度

R 计算特定整数序列的实例数

r - 在 ggplot 中对齐和排列图表