2016-10-11 4 views
1

у меня есть data.frame следующей структуры:распространенных значений через неопределенные столбцы

value group1 group2 
1:  1  A  a1 
2:  2  A  a2 
3:  3  A  a3 
4:  4  B  b1 
5:  5  B  b2 

Я хотел бы, чтобы распространить его на это:

group1 var1 var2 var3 value1 value2 value3 
1:  A a1 a2 a3  1  2  3 
2:  B b1 c2 NA  4  5  NA 

Поэтому в основном существует неопределенное число из varX столбцов на основе количества уникальных group2 в каждом group1, а затем сопровождающего столбца valueX.

Есть ли хороший способ достичь этого? spread от tidyr не совсем делает то, что я хочу, насколько я понимаю. Благодаря!

...

Здесь вы можете построить первый data.frame:

data.frame(value=1:5, group1=c("A","A","A","B","B"), group2=c("a1","a2","a3","b1","b2")) 

ответ

2

Нам нужно создать столбец последовательности, используя версию развития data.table, это можно сделать с помощью функции rowid , Кроме того, поскольку dcast от data.table занимает несколько столбцов, это можно сделать в одной строке.

library(data.table)#v1.9.7+ 
dcast(setDT(df1), group1~rowid(group1), value.var = c("value", "group2"), sep="") 
+0

является то, что github версия данных.table? – moman822

+0

@ moman822 Да, если у вас есть 1.9.6, создайте переменную группировки, то есть 'dcast (setDT (df1) [,, rn: = 1: .N <, by = group1], group1 ~ rn, value.var = c ("value", "group2")) ' – akrun

+0

есть ли дополнительная запятая в первой скобке? – moman822

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