N <- 10
df <- data.frame(cell=1:N,per_2001=rnorm(N),per_2002=rnorm(N),hus_2001=rnorm(N),hus_2002=rnorm(N))
# using data.table
library(data.table)
## Warning: package 'data.table' was built under R version 4.0.5
dt <- as.data.table(df)
melt(dt,measure.vars=list(c(2,3),c(4,5)))
# using 'reshape' from stats (included in base R)
stats::reshape(df,varying=list(c(2,3),c(4,5)),direction='long')
# using 'pivot_longer' from tidyr package
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.0.5
df <- data.frame(cell=1:N,per2001=rnorm(N),per2002=rnorm(N),hus2001=rnorm(N),hus2002=rnorm(N))
pivot_longer(df,cols=2:5,names_pattern='([a-z][a-z][a-z])([0-9][0-9][0-9][0-9])',names_to=c("type","year"))
df <- data.frame(cell=1:N,per2001=rnorm(N),per2002=rnorm(N),hus2001=rnorm(N),hus2002=rnorm(N))
pivot_longer(df,cols=2:5,names_pattern='([a-z][a-z][a-z])([0-9][0-9][0-9][0-9])',names_to=c(".value","year"))
df <- data.frame(cell=1:N,per_2001=rnorm(N),per_2002=rnorm(N),hus_2001=rnorm(N),hus_2002=rnorm(N))
pivot_longer(df,cols=2:5,names_sep='_',names_to=c("type","year"))
df <- data.frame(cell=1:N,per_2001=rnorm(N),per_2002=rnorm(N),hus_2001=rnorm(N),hus_2002=rnorm(N))
pivot_longer(df,cols=2:5,names_sep='_',names_to=c(".value","year"))