2015-11-28 3 views
0

У меня есть данные (часть большего набора), которые выглядят следующим образом: (У меня не может быть более одной строки на гласную из-за того, как настроен весь фрейм данных)Переформатирование данных в R для линейного графика

info.df <- data.frame(
    vowelFormantF2_90 = c(1117, 1433, 2392), 
    vowelFormantF3_90 = c(2820, 3062, 2670), 
    vowelFormantF2_50 = c(1016, 1313, 2241), 
    vowelFormantF3_50 = c(2842, 3150, 3038), 
    previousVowel = c("U", "U", "ae")) 

50-и 90 соответствуют времени (50% точка длительности гласного приходит до 90% точки длительности гласного).

Я хочу рассчитать время как ось x и значение форманта (четырехзначное число) в качестве оси y. Я хочу группировать строки по цвету по F2 или F3 в имени столбца. Столбец previousVowel также важен, потому что в конце концов я захочу подмножить свои данные гласным. Я планировал использовать ggplot2, но я открыт для других методов построения.

Я думал о делать что-то вроде этого:

time <- c(50,50,50,50,50,50) 
formant <- c("F2","F2","F2","F3","F3","F3") 
hz <- c(info.df$vowelFormantF2_50, info.df$vowelFormantF3_50) 
newdataframe.df <- data.frame(time, formant, hz) 

Но это кажется громоздким, как этот набор данных растет, а также не учитывает самого гласного.

Есть ли способ форматировать эти данные так, как я хочу?

+0

Я думаю, вы забыли определить 'U' и' ae' в 'vowel <- c (U, U, ae)' в вашем примере. –

+0

Спасибо! я починил это – Lisa

ответ

1

Я хотел бы использовать tidyr:

library(tidyr) 
df <- info.df %>% gather(var, val, -vowel) %>% 
      separate(var, into = c("formant", "time")) 

который даст:

vowel  formant time val 
1  U vowelFormantF2 90 1117 
2  U vowelFormantF2 90 1433 
3  ae vowelFormantF2 90 2392 
4  U vowelFormantF3 90 2820 
5  U vowelFormantF3 90 3062 
6  ae vowelFormantF3 90 2670 

Вы можете добавить на:

library(dplyr) 
df %>% mutate(formant = sub("vowelFormant", "", formant)) 

удалить vowelFormant, и просто F2, F3 и т. Д.

Смежные вопросы