Создание единой строки из 3x3 data.frame - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующий data.frame

  example.df <- data.frame(target.condition = c("congruent", "incongruent", "neutral"),
                       sdGY.2 = sample(20:30, 3, replace = T),
                       sdGX.2 = sample(20:30, 3, replace = T))

Я хотел бы получить следующий результат:

 congruent.sdGY.2 congruent.sdGX.2 incongruent.sdGY.2 incongruent.sdGX.2 neutral.sdGY.2 neutral.sdGX.2
1               28               29                 20                 23             27             29

Я сделал это с помощью:

  test <- data.frame(congruent.sdGY.2 = example.df$sdGY.2[1], congruent.sdGX.2 = example.df$sdGX.2[1],
                 incongruent.sdGY.2 = example.df$sdGY.2[2], incongruent.sdGX.2 = example.df$sdGX.2[2],
                 neutral.sdGY.2 = example.df$sdGY.2[3], neutral.sdGX.2 = example.df$sdGX.2[3])

Полагаю, есть более простой способ, верно?


Спасибо!

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете сделать это, используя пакеты tidyr и dplyr из Tidyverse.Сначала это меняет структуру, так что и sdGX.2, и sdGY.2 находятся в одном и том же столбце в разных строках, а затем объединяет имена столбцов вместе, а затем изменяет структуру, чтобы в ней было много столбцов.

 library(dplyr)
 library(tidyr)

 example.df %>% 
   gather(ColName, ResultValue, -target.condition) %>% 
   unite(NewColName, c("target.condition", "ColName"), sep = ".", remove = TRUE) %>% 
   spread(NewColName, ResultValue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...