Misha
Misha

Reputation: 3126

reshape data in r when reshape cannot guess the names of the time varying variables

I have a dataset in wide form with more than 1500 columns. Since many of the variables are repeated I´d like to reshape into long form. However, r throws an error:

Error in guess(varying) : 
  Failed to guess time-varying variables from their names

Trying to understand this with a toy example I find that

u<-data.frame(id=1:100,f.1=rnorm(100),u.1=rnorm(100),i.1=rnorm(100),f.2=rnorm(100),u.2=rnorm(100),i.2=rnorm(100),
                  f.3=rnorm(100),u.3=rnorm(100),i.3=rnorm(100))

reshape(u,varying=2:10,direction="long")

works fine. However, my data looks more like :

u<-data.frame(id=1:100,f1=rnorm(100),u1=rnorm(100),i1=rnorm(100),f2=rnorm(100),u2=rnorm(100),i2=rnorm(100),
              f3=rnorm(100),u3=rnorm(100),i3=rnorm(100))

reshape(u,varying=2:10,direction="long")

and this is where I´m lost. Any smart idea, except of changing the variable names (which is tiring), of how I can do this?

Upvotes: 8

Views: 19776

Answers (3)

Verbal
Verbal

Reputation: 147

Just add option sep = "" to let reshape knows that your columns name is not separate by ..

Upvotes: 5

IRTFM
IRTFM

Reputation: 263331

I see Andrie's solution, but perhaps my efforts at understanding rehape syntax can also be useful. The 'varying' argument is supposed to be a named vector (or list) with the column indices grouped by name:

reshape(u, varying=c( f=c(2,5,8), u=c(3,6,9), i=c(4,7,10) ), direction="long")

And this would also have worked (since the names imply a grouping):

 reshape(u,varying=names(u)[2:10], direction="long")

I went back and tried your code and found that it also worked, so I'm wondering if you wanted something different that we are guessing?

Upvotes: 6

Andrie
Andrie

Reputation: 179408

Add the v.names argument:

reshape(u,varying=2:10,direction="long", v.names=c("f", "u", "i"))
    id time          f          u             i
1.1  1    1  1.7821678  0.5144692  0.0006889928
2.1  2    1 -0.5036801  1.8242030  0.9695553817
3.1  3    1  1.1857706  0.6469423  0.6775602175
4.1  4    1 -0.5759202 -1.0349980  0.7183451146
5.1  5    1 -2.3559773  0.8598020  0.5506339475
6.1  6    1 -0.8047651 -1.4768172 -0.3667918383
...

Upvotes: 15

Related Questions