[英]Data wrangling to map timing and frequency of the notes in a recording
我有一個數據集,其中包含 216 個錄音文件,由開始和結束時間(以秒為單位)以及雄鳥和雌鳥唱出的音符的各自頻率表示:
筆記 | 聲音文件 | 開始 | 結尾 | 頻率 | 性別 |
---|---|---|---|---|---|
1 | 一個 | 2.7 | 3.2 | 1.55 | F |
2 | 一個 | 3.2 | 3.6 | 1.17 | 米 |
3 | 一個 | 3.6 | 4.0 | 1.17 | F |
4 | 一個 | 3.9 | 4.3 | 0.89 | 米 |
5 | 一個 | 4.3 | 4.4 | 0.79 | F |
1 | b | 1.9 | 2.3 | 1.45 | F |
2 | b | 2.4 | 2.7 | 3.71 | 米 |
3 | b | 2.6 | 3.1 | 1.36 | F |
4 | b | 3.1 | 3.4 | 3.62 | 米 |
5 | b | 3.9 | 4.4 | 0.79 | 米 |
6 | b | 4.5 | 4.6 | 1.17 | F |
我需要將數據轉換為長格式,每次記錄的雄性和雌性鳥類的時間映射頻率值,例如:
聲音文件 | 時間 | 米 | F |
---|---|---|---|
一個 | 2.7 | 0 | 1.55 |
一個 | 2.8 | 0 | 1.55 |
一個 | 2.9 | 0 | 1.55 |
一個 | 3.0 | 0 | 1.55 |
一個 | 3.1 | 0 | 1.55 |
一個 | 3.2 | 1.17 | 0 |
一個 | 3.3 | 1.17 | 0 |
我嘗試了以下代碼,但它沒有工作並遇到錯誤:
錯誤: summarise()
輸入..1
有問題。 未找到 x 對象“頻率”:
代碼:
cum_call1 <- function(start,end,freq){
data.frame(time = seq(start,end,by = .1), calling = 1, freq= mean(freq))
}
cum_expand1 <- function(start,end){
data.frame(time = seq(start,end,by = .1))
}
data.frame$start <- round(data.frame$start,1)
data.frame$end <- round(data.frame$end,1)
duet_call <- data.frame %>%
group_by(sound.files,sex,note) %>%
summarise(cum_call1(start,end,freq)) %>%
ungroup() %>%
select(-note)
有什么正確/更好的方法嗎? 歡迎任何建議! 提前致謝!
不是基於 R,而是來自 tidyverse 包之一的 pivot_wider 函數應該有所幫助。 當一列(性別)變成兩列時,您正在將列旋轉得更寬而不是更長。(m,f)
library(tidyverse)
pivot_wider(data,names_from=sex,values_from=freq)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.