簡體   English   中英

總結每分鍾出現的次數 R

[英]Summarize number of occurrences per minute in R

我有一些遙測數據記錄了接收器對聲學標簽的檢測。 數據幀包括唯一標簽代碼和檢測時間。 時間采用 Posix 時間(自 1970 年 1 月 1 日 00:00:00 UTC 以來的秒數)。

det <- data.frame(
code = c("34", "15", "34", "36", "15", "34", "36", "15", "34", "15", "15", "15", "34", "15", "34", "15", "34", "15", "34", "15", "34", "34", "15", "36"),
posix = c(1599655073, 1599655136, 1599655136, 1599655152, 1599655199, 1599655199, 1599655210, 1599655262, 1599655262, 1599655325, 1599655388, 1599655451, 1599655451, 1599655514, 1599655514, 1599655577, 1599655577, 1599655640, 1599655640, 1599655703, 1599655703, 1599655765, 1599655766, 1599655789)
) 

我需要知道每分鍾檢測到標簽的次數。 output 應記錄從系列開始的連續分鍾、標簽代碼以及該分鍾內出現的次數。 如果一個代碼在一分鍾內沒有出現,它應該得到一個零。

output 的前六行應如下所示:

 min code freq
1   1   34    1
2   1   15    0
3   1   36    0
4   2   34    1
5   2   15    1
6   2   36    1

提前致謝。

這對tidyr::complete來說是個好任務:首先使用 lubridate package 轉換日期,然后用tidyr::complete填補空白並創建freq變量。

library(tidyr)
library(dplyr)
library(lubridate)

det %>% 
  mutate(posix = minute(as.POSIXlt(posix, origin = "1970-01-01")),
         minute = posix - first(posix) + 1) %>% 
  complete(minute, code) %>% 
  group_by(minute, code) %>% 
  mutate(freq = sum(complete.cases(posix))) %>% 
  select(-posix)

# A tibble: 39 x 3
   minute code   freq
    <dbl> <chr> <int>
 1      1 15        0
 2      1 34        1
 3      1 36        0
 4      2 15        1
 5      2 34        1
 6      2 36        0
 7      3 15        1
 8      3 34        1
 9      3 36        1
10      4 15        0
# ... with 29 more rows

minutecode轉換為因子並指定group_by(..., .drop = FALSE)允許獲取minutecode的所有組合,即使在數據中找不到。 這些將被分配freq 0。

library(dplyr)

det |>
  mutate(minute = 1 + ((posix - min(posix)) %/% 60)) |>
  mutate(minute = factor(minute, levels = seq(1, max(minute)))) |>
  mutate(code = factor(code)) |>
  group_by(minute, code, .drop = FALSE) |>
  summarize(freq = n(), .groups = "drop")

+ # A tibble: 36 × 3
   minute code   freq
   <fct>  <fct> <int>
 1 1      15        0
 2 1      34        1
 3 1      36        0
 4 2      15        1
 5 2      34        1
 6 2      36        1
 7 3      15        1
 8 3      34        1
 9 3      36        1
10 4      15        1
# … with 26 more rows


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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