【发布时间】:2014-06-26 05:00:32
【问题描述】:
[更新:试图澄清和简化,更正示例代码和数据。]
我有一组在几天内进行的测量。在任何测量中可以捕获的数字范围是 1-25(在现实生活中,给定测试集,范围可能高达 100 或低至 20)。
我想要一种方法来计算自发生特定数字以来已经过去了多少事件,而不管测量列如何。我希望它在数字匹配后重置计数,如下所示。
V1,V2,Vn 是捕获的值。 Match1、Match2、Matchn 是自上次遇到列以来的计数。
注意:无论遇到哪个 Vx 列 n,Matchn 计数都会递增。
非常感谢任何帮助。
这与我之前的帖子here有些相关
示例输入
library(data.table)
t <- data.table(
Date = as.Date(c("2013-5-1", "2013-5-2", "2013-5-3", "2013-5-4", "2013-5-5", "2013-5-6", "2013-5-7", "2013-5-8", "2013-5-9", "2013-5-10")),
V1 = c(4, 2, 3, 1,7,22,35,3,29,36),
V2 = c(2, 5, 12, 4,8,2,38,50,4,1)
)
用于创建示例输出的代码
t$match1 <- c(1,2,3,4,1,2,3,4,5,1)
t$match2 <- c(1,1,2,3,4,5,1,2,3,4)
t$match3 <- c(1,2,3,1,2,3,4,5,1,2)
> t
Date V1 V2 match1 match2 match3
1: 2013-05-01 4 2 1 1 1
2: 2013-05-02 2 5 2 1 2
3: 2013-05-03 3 12 3 2 3
4: 2013-05-04 1 4 4 3 1
5: 2013-05-05 7 8 1 4 2
6: 2013-05-06 22 2 2 5 3
7: 2013-05-07 35 38 3 1 4
8: 2013-05-08 3 50 4 2 5
9: 2013-05-09 29 4 5 3 1
10: 2013-05-10 36 1 1 4 2
【问题讨论】:
-
我仍然不明白您是如何从这篇文章中得出
match1、match2和match3的值的... -
Match1 在“当前”行中寻找 1,而不管列(V1、V2)如何。如果有 1,则 Match1 中的计数将在该事件(行)上重置为独占事件或以下事件。
-
好的。对于 inclusive,第一次匹配发生在第 4 行。重置发生在第 5 行。第二次匹配发生在第 10 行。但是重置发生在第 10 行...您如何决定是否重置在同一行或下一行(目前仅包含)?
-
t是一个真的不好的变量名称。查找?t! :-) -
附注 - 使用
t[, match1 := ...]而不是t$match1 = ...
标签: r count data.table