id random count
a 0 -1
a 1 1
a 1 2
a 0 -1
a 0 -2
a 1 1
a 0 -1
a 1 1
a 0 -1
b 0 -1
b 0 -2
b 1 1
b 0 -1
b 1 1
b 0 -1
b 0 -2
b 0 -3
id
是播放器,random
是二进制0
或1
,我想创建一个计数列,用于计算1&0 39和0的序列#39;播放器,最好没有循环,因为数据库非常大。
答案 0 :(得分:5)
我认为这是你正在寻找的东西:
library(data.table)
setDT(DF)[, count := seq_len(.N), by=.(id,rleid(random))]
给出了
id random count
1: a 0 1
2: a 1 1
3: a 1 2
4: a 0 1
5: a 0 2
6: a 1 1
7: a 0 1
8: a 1 1
9: a 0 1
10: b 0 2
11: b 0 3
12: b 1 1
13: b 0 1
14: b 1 1
15: b 0 1
16: b 0 2
17: b 0 3
(在data.table软件包的下一个版本1.9.8中,会有一个小快捷方式setDT(DF)[, count := rowid(rleid(random)), by=id]
。我正在编写此笔记,以便稍后更新答案。)
您可能还需要运行组的标识符:
DF[, rid := rleid(random), by=id]
给出了
id random count rid
1: a 0 1 1
2: a 1 1 2
3: a 1 2 2
4: a 0 1 3
5: a 0 2 3
6: a 1 1 4
7: a 0 1 5
8: a 1 1 6
9: a 0 1 7
10: b 0 1 1
11: b 0 2 1
12: b 1 1 2
13: b 0 1 3
14: b 1 1 4
15: b 0 1 5
16: b 0 2 5
17: b 0 3 5
如果您通读introductory materials on the package,您会发现这些变量也可以一步创建。
答案 1 :(得分:3)
这是dplyr
解决方案
dat %>%
transform(idx = c(0,cumsum(random[-1L] != random[-length(random)]))) %>%
group_by(id, idx) %>%
mutate(count = -1*cumsum(random == 0) + cumsum(random == 1)) %>%
ungroup() %>%
select(-idx)
Source: local data frame [17 x 3]
id random count
1 a 0 -1
2 a 1 1
3 a 1 2
4 a 0 -1
5 a 0 -2
6 a 1 1
7 a 0 -1
8 a 1 1
9 a 0 -1
10 b 0 -1
11 b 0 -2
12 b 1 1
13 b 0 -1
14 b 1 1
15 b 0 -1
16 b 0 -2
17 b 0 -3
答案 2 :(得分:0)
我认为最简单的方法是使用runner包中的HttpClient
函数。 Dim refreshRange As Range
Set refreshRange = Range("'Courses Date'!E1:BF1").Find(Range("'Matrix'!" & courseColLetter & "1").Value & " Refresher")
If Not refreshRange Is Nothing Then RefresherColNumber = refreshRange.Column
最快,如下节所示
解决方案
streak_run
基准
streak_run