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

Popular posts from this blog

javascript - jquery or ashx not working -

opencv - DataType<cv::detail::deriv_type>::depth what is it used for -

python 3.x - Mapping specific letters onto a list of words -