moman822 moman822 - 10 months ago 49
R Question

spread values across undefined columns

I have a data.frame of the following structure:

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

I would like to spread it out to this:

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

So basically there is an unspecified number of
columns based on the number of unique
in each
, and then an accompanying
column as well.

Is there a good way to accomplish this?
from tidyr doesn't quite do what I want as I understand it. Thanks!


Here you can build the first data.frame:

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

Answer Source

We need to create a sequence column, using the development version of data.table, this can be done with rowid function. Also, as the dcast from data.table takes multiple value.var columns, it can be done in a single line.

dcast(setDT(df1), group1~rowid(group1), value.var = c("value", "group2"), sep="")