Длинные и широкие данные с tidyR?

У меня есть данные, которые выглядят примерно так

df = data.frame(name=c("A","A","B","B"),
                group=c("g1","g2","g1","g2"),
                V1=c(10,40,20,30),
                V2=c(6,3,1,7))

Я хочу изменить его, чтобы он выглядел так:

df = data.frame(name=c("A", "B"),               
                V1.g1=c(10,20),
                V1.g2=c(40,30),
                V2.g1=c(6,1),
                V2.g2=c(3,7))

Возможно ли это сделать с помощью tidyR?

Я могу сделать это с изменением формы

reshape(df, idvar='name', timevar='group', direction='wide')

но всегда полезно узнать что-то новое.

12 голосов | спросил Ignacio 19 MarpmThu, 19 Mar 2015 16:45:41 +03002015-03-19T16:45:41+03:0004 2015, 16:45:41

2 ответа


0

Код reshape компактен, так как работает с несколькими столбцами значений. Используя то же самое в tidyr, может потребоваться пара шагов. Преобразуйте «широкий» формат в «длинный», используя gather, чтобы был один столбец «Val», unite столбцы «Var» (из предыдущего шага) и «группа», чтобы создать один столбец «VarG», а затем использовать spread для преобразования «длинного» в «широкий» формат.

 library(tidyr)
 gather(df, Var, Val, V1:V2) %>% 
                    unite(VarG, Var, group) %>% 
                    spread(VarG, Val)
 #    name V1_g1 V1_g2 V2_g1 V2_g2
 #1    A    10    40     6     3
 #2    B    20    30     1     7
ответил akrun 19 MarpmThu, 19 Mar 2015 16:49:32 +03002015-03-19T16:49:32+03:0004 2015, 16:49:32
0

dcast в data.table v1.9.5 + может обрабатывать несколько value.var столбцы. Таким образом, мы можем сделать:

require(data.table) # v1.9.5+
dcast(setDT(df), name ~ group, value.var=c("V1", "V2"))
#    name V1_g1 V1_g2 V2_g1 V2_g2
# 1:    A    10    40     6     3
# 2:    B    20    30     1     7

В основном, не нужно плавить и кастовать, а прямо кастовать. Вы можете установить его, следуя этим инструкциям .

ответил Arun 19 MarpmThu, 19 Mar 2015 17:32:17 +03002015-03-19T17:32:17+03:0005 2015, 17:32:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132