我想知道一个数字连续出现在一列中的行数,并将此数字放入每个匹配项的矩阵中。
例如,我想使用此输入来查找所有连续的-1
次出现
df$V1
0
1
0
-1
-1
0
1
-1
-1
-1
1
找到连续-1
的行数:
output
2
3
我所能想到的只是遍历每一行,看看上面一行中是否发生-1
并且当前行中的-1
也是...
// Get data of element and split it into an array
var ar = $('#dom-target').data('stuff').split(',');
// Use this array to get a Date
var parsedDate = new Date(Date.UTC.apply(null, ar));
// Do your logic
jQuery('#myCounter').mbComingsoon({expiryDate: parsedDate , speed: 500});
...
,然后添加到计数器中。但我想有必要有更快的方法来做到这一点?
答案 0 :(得分:2)
使用rle
x = c(0L, 1L, 0L, -1L, -1L, 0L, 1L, -1L, -1L, -1L, 1L)
with(rle(x), lengths[values == -1])
#[1] 2 3
适用于unique
x
元素
with(rle(x), setNames(sapply(unique(values), function(x)
lengths[values == x]), nm = unique(values)))
#$`0`
#[1] 1 1 1
#$`1`
#[1] 1 1 1
#$`-1`
#[1] 2 3
答案 1 :(得分:0)
对于所有值,我们都可以使用rleid
data.table
执行此操作
library(data.table)
res <- setDT(df)[, .(value = V1[1L], n = .N), .(grp = rleid(V1))]
res
# grp value n
#1: 1 0 1
#2: 2 1 1
#3: 3 0 1
#4: 4 -1 2
#5: 5 0 1
#6: 6 1 1
#7: 7 -1 3
#8: 8 1 1
由此,我们可以将元素分配到&#39; V1&#39;是-1
res[value== -1][, grp := NULL][]
# value n
#1: -1 2
#2: -1 3
df <- structure(list(V1 = c(0L, 1L, 0L, -1L, -1L, 0L, 1L, -1L, -1L,
-1L, 1L)), .Names = "V1", row.names = c(NA, -11L), class = "data.frame")
答案 2 :(得分:0)
你可以在基础R:
中做到这一点r <- x==-1
diff(unique(cumsum(r)[!r]))
#[1] 2 3
x <- df$V1
。