2017-01-31 7 views
1

У меня есть data.frame со средней и стандартной ошибкой для двух переменных: var1 и var2.Обработка данных.файла от «широкого» до «длинного» формата для построения сред и стандартных ошибок

Это data.frame, original_df, пришли от создания этих статистических данных из данных для каждой из двух групп:

original_df <- data.frame(group_dummy_code = c(0, 1), 
      var1_mean = c(1.5, 2.5), 
      var1_se = c(.025, .05), 
      var2_mean = c(3.5, 4.5), 
      var2_se = c(.075, .1)) 

> original_df 
    group_dummy_code var1_mean var1_se var2_mean var2_se 
1    0  1.5 0.025  3.5 0.075 
2    1  2.5 0.050  4.5 0.100 

Я пытаюсь использовать функцию tidyrgather() изменить data.frame в desired_df, чтобы Заговор средство от двух переменных и стандартные ошибки:

desired_df <- data.frame(group_dummy_code = c(0, 1, 0, 1), 
         key = c("var1", "var1", "var2", "var2"), 
         val_mean = c(1.5, 2.5, 3.5, 4.5), 
         val_se = c(.025, .05, .075, .1)) 

> desired_df 
    group_dummy_code key val_mean val_se 
1    0 var1  1.5 0.025 
2    1 var1  2.5 0.050 
3    0 var2  3.5 0.075 
4    1 var2  4.5 0.100 

я пытался gather() дважды со следующим:

df %>% 
    gather(mean_key, mean_val, -group_dummy_code, -contains("se")) %>% 
    gather(se_key, se_val, -group_dummy_code, -mean_key, -mean_val) 

Но это приводит к слишком большим количеством строк (в частности, с несколькими стандартными ошибками для каждого среднего):

group_dummy_code mean_key mean_val se_key se_val 
1    0 var1_mean  1.5 var1_se 0.025 
2    1 var1_mean  2.5 var1_se 0.050 
3    0 var2_mean  3.5 var1_se 0.025 
4    1 var2_mean  4.5 var1_se 0.050 
5    0 var1_mean  1.5 var2_se 0.075 
6    1 var1_mean  2.5 var2_se 0.100 
7    0 var2_mean  3.5 var2_se 0.075 
8    1 var2_mean  4.5 var2_se 0.100 

Это кажется довольно общий шаг обработки, особенно после создания статистики для среднее и стандартное отклонение для ряда переменных, но gather() ing дважды - один раз для среднего значения и один раз для стандартных переменных ошибки - не похоже на хороший подход.

Использование tidyr (или dplyr или другой пакет), как я могу создать desired_df от original_df?

+0

Смотрите также [Перестройка несколько наборов измерений столбцы (широкий формат) в отдельные столбцы (длинный формат)] (http://stackoverflow.com/questions/12466493/reshaping-multiple-sets-of-measurement-columns-wide-format-into-single-columns) – Henrik

ответ

1

tidyr::gather() не обеспечивает функциональные возможности для изменения формы фрейма данных со столбцами многозначных, если вы хотите придерживаться tidyr, вы можете сделать это с gather-separate-spread:

library(tidyr) 
original_df %>% 
    gather(var_stats, value, -group_dummy_code) %>% 
    separate(var_stats, into = c("var", "stats")) %>% 
    spread(stats, value) 

# group_dummy_code var mean se 
#1    0 var1 1.5 0.025 
#2    0 var2 3.5 0.075 
#3    1 var1 2.5 0.050 
#4    1 var2 4.5 0.100