Reshape a dataframe repeating columns in R -
i reshape dataframe , repeat informations name strings ("pro1", "pro2" , "pro3").
my input:
name chr position ne001 ne002 ne003 pro1 1 25 -0.3 0.2 0.4 pro2 2 23 -0.4 0.2 -0.3 pro3 3 30 -0.3 0.2 0.4 my expected output:
sample pro1 chr position pro2 chr position pro3 chr position ne001 -0.3 1 25 -0.4 2 23 -0.3 3 30 ne002 0.2 1 25 0.2 2 23 0.2 3 30 ne003 0.4 1 25 -0.3 2 23 0.4 3 30
you can use melt , dcast "reshape2", you'll have melt twice. assuming source data.frame called "mydf".
the first melt
library(reshape2) dfl1 <- melt(mydf, id.vars=c("name", "chr", "position"), variable.name="v1") head(dfl1) # name chr position v1 value # 1 pro1 1 25 ne001 -0.3 # 2 pro2 2 23 ne001 -0.4 # 3 pro3 3 30 ne001 -0.3 # 4 pro1 1 25 ne002 0.2 # 5 pro2 2 23 ne002 0.2 # 6 pro3 3 30 ne002 0.2 the second melt
dfl2 <- melt(dfl1, id.vars=c("name", "v1"), variable.name="v2") head(dfl2) # name v1 v2 value # 1 pro1 ne001 chr 1 # 2 pro2 ne001 chr 2 # 3 pro3 ne001 chr 3 # 4 pro1 ne002 chr 1 # 5 pro2 ne002 chr 2 # 6 pro3 ne002 chr 3 the reshaping step
dcast(dfl2, v1 ~ name + v2) # v1 pro1_chr pro1_position pro1_value pro2_chr pro2_position pro2_value # 1 ne001 1 25 -0.3 2 23 -0.4 # 2 ne002 1 25 0.2 2 23 0.2 # 3 ne003 1 25 0.4 2 23 -0.3 # pro3_chr pro3_position pro3_value # 1 3 30 -0.3 # 2 3 30 0.2 # 3 3 30 0.4
Comments
Post a Comment