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?
Description. This function reshapes a data frame between 'wide' format with repeated measurements in separate columns of the same record and 'long' format with the repeated measurements in separate records.
reshape2 is an R package written by Hadley Wickham that makes it easy to transform data between wide and long formats.
The easiest way to reshape data between these formats is to use the following two functions from the tidyr package in R: pivot_longer(): Reshapes a data frame from wide to long format. pivot_wider(): Reshapes a data frame from long to wide format.
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
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With