2016-10-28 7 views
1

Используя основные R, можно транспонировать dataframe, скажем mtcars, который имеет все столбцы одного и того же класса:Как перенести данные в tidyverse?

as.data.frame(t(mtcars)) 

Или с трубами:

library(magrittr) 
mtcars %>% t %>% as.data.frame 

Как сделать то же самое в tidyr или tidyverse пакеты?

Моя попытка ниже дает:

Error: Duplicate identifiers for rows

library(tidyverse) 
mtcars %>% gather(var, value, everything()) %>% spread(var, value) 
+4

Если вы хотите Tran spose, это должна быть матрица, а не data.frame. Что случилось с использованием 't'? – Roland

+1

Попробуйте 'add_rownames (mtcars)%>% gather (var, value, -rowname)%>% spread (rowname, value)' – akrun

+2

Зачем вы хотите это сделать? Вы не можете значительно трансформировать data.frame, который содержит много переменных классов без потери информации. – Thomas

ответ

10

Попробуйте с add_rownames

add_rownames(mtcars) %>% 
     gather(var, value, -rowname) %>% 
     spread(rowname, value) 

В новой версии, row_names_to_column заменяет add_rownames

mtcars %>% 
    rownames_to_column %>% 
    gather(var, value, -rowname) %>% 
    spread(rowname, value) 
+0

Спасибо @akrun. Похоже, что add_rownames обесценивается, но это работает: mtcars%>% rownames_to_column%>% gather (var, value, -rowname)%>% spread (rowname, value) – Irakli

+0

Строки в преобразованных данных по умолчанию упорядочены (в алфавитном порядке mtcars дело). Если вы хотите заказать строки в соответствии с порядком начального столбца (например, 'names (mtcars)'), требуется дополнительный шаг: 'mtcars.t [order (match (mtcars.t $ var, names (mtcars))) ,] ', где mtcars.t - преобразованные данные. – fber