[英]How to count number of occurrences of a consecutive string of the same number in R
[英]Using R to count consecutive occurrences of a number and how long each occurrence lasts for?
我有一個大型數據集(dt),它有一個時間列(其中時間以秒為單位)和一個列,當其他一些變量滿足某個值時記錄為 1,當它們不滿足時記錄為 0,例如:
time (s) var
0 1
0.3 1
0.6 0
0.9 0
1.2 1
1.5 1
1.8 0
第 1 部分)我想要做的是每次在計數列中重復 1 作為唯一出現(超過兩次)時計數,如下所示:
time (s) var count
0 1 1
0.3 1 1
0.6 0 0
0.9 0 0
1.2 1 2
1.5 1 2
1.8 0 0
同一回合中的每次出現都將具有相同的數字,而出現 0 的地方則沒有計數。
對於第 1 部分,到目前為止我有這個,但我希望它打印每個唯一的出現作為它不做的列中的計數:
with(rle(dt$var), sum(lengths[values] > 2))
第 2 部分)我還想知道每次出現持續的時間長度。 (我還有一個復制列,每行的值為 1)
我試過這個來計算第 2 部分,但它不起作用......
var_time <- dt %>%
group_by(replicate) %>%
mutate(var_time = cumsum(var != lag(var, default = ""))) %>%
group_by(var, time) %>%
summarise(start = min(time),
end = max(time),
var = sum(var))
您可以使用rle
來獲得第一部分的答案。
dt$count <- with(rle(dt$var), rep(values * cumsum(values & lengths >= 2),lengths))
dt
# time var count
#1 0.0 1 1
#2 0.3 1 1
#3 0.6 0 0
#4 0.9 0 0
#5 1.2 1 2
#6 1.5 1 2
#7 1.8 0 0
data.table
的選項
library(data.table)
setDT(df1)[, count := rleid(var) * var][count != 0,
count := match(count, unique(count))][]
# time var count
#1: 0.0 1 1
#2: 0.3 1 1
#3: 0.6 0 0
#4: 0.9 0 0
#5: 1.2 1 2
#6: 1.5 1 2
#7: 1.8 0 0
或者使用 rle rle/inverse.rle
inverse.rle 使用base R
df1$count <- inverse.rle(within.list(rle(df1$var),
values[as.logical(values)] <- seq_along(values[as.logical(values)])))
df1 <- data.frame(time = c(0, 0.3, 0.6, 0.9, 1.2, 1.5, 1.8), var = c(1, 1, 0, 0, 1, 1, 0))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.