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