繁体   English   中英

数据整理以映射录音中音符的时间和频率

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM