簡體   English   中英

使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM