r - Transform complex data frame -
i have data frame 1st column (weights) contains list (of data frames?):
> head(data$weights) > data <- structure(list(a373r11 = structure(list(signature.1a = 0, signature.1b = 0, signature.2 = 0, signature.3 = 0.151631702143023, signature.4 = 0.149799882118262, signature.5 = 0, signature.6 = 0, signature.7 = 0.0634912587993959, signature.8 = 0, signature.9 = 0.173189155080817, signature.10 = 0, signature.11 = 0, signature.12 = 0, signature.13 = 0, signature.14 = 0, signature.15 = 0, signature.16 = 0, signature.17 = 0, signature.18 = 0, signature.19 = 0, signature.20 = 0, signature.21 = 0.0905517653558877, signature.r1 = 0, signature.r2 = 0, signature.r3 = 0, signature.u1 = 0.155590748898003, signature.u2 = 0.145955461287919), .names = c("signature.1a", "signature.1b", "signature.2", "signature.3", "signature.4", "signature.5", "signature.6", "signature.7", "signature.8", "signature.9", "signature.10", "signature.11", "signature.12", "signature.13", "signature.14", "signature.15", "signature.16", "signature.17", "signature.18", "signature.19", "signature.20", "signature.21", "signature.r1", "signature.r2", "signature.r3", "signature.u1", "signature.u2"), row.names = "a373r11", class = "data.frame"), a373r13 = structure(list(signature.1a = 0, signature.1b = 0, signature.2 = 0, signature.3 = 0.221014874027829, signature.4 = 0, signature.5 = 0, signature.6 = 0, signature.7 = 0, signature.8 = 0.279252211893692, signature.9 = 0, signature.10 = 0, signature.11 = 0, signature.12 = 0, signature.13 = 0, signature.14 = 0, signature.15 = 0, signature.16 = 0, signature.17 = 0, signature.18 = 0, signature.19 = 0.115216422668955, signature.20 = 0, signature.21 = 0, signature.r1 = 0, signature.r2 = 0, signature.r3 = 0.0636987713225648, signature.u1 = 0.108875099907467, signature.u2 = 0), .names = c("signature.1a", "signature.1b", "signature.2", "signature.3", "signature.4", "signature.5", "signature.6", "signature.7", "signature.8", "signature.9", "signature.10", "signature.11", "signature.12", "signature.13", "signature.14", "signature.15", "signature.16", "signature.17", "signature.18", "signature.19", "signature.20", "signature.21", "signature.r1", "signature.r2", "signature.r3", "signature.u1", "signature.u2"), row.names = "a373r13", class = "data.frame"), a373r3 = structure(list(signature.1a = 0, signature.1b = 0, signature.2 = 0, signature.3 = 0.0795605471131758, signature.4 = 0.0973130562439999, signature.5 = 0, signature.6 = 0, signature.7 = 0, signature.8 = 0.249674548796242, signature.9 = 0.0725013504411567, signature.10 = 0, signature.11 = 0.064665155855146, signature.12 = 0, signature.13 = 0, signature.14 = 0, signature.15 = 0, signature.16 = 0, signature.17 = 0, signature.18 = 0, signature.19 = 0, signature.20 = 0, signature.21 = 0, signature.r1 = 0, signature.r2 = 0, signature.r3 = 0.0703546703126821, signature.u1 = 0.21753544296676, signature.u2 = 0.0739201832004727), .names = c("signature.1a", "signature.1b", "signature.2", "signature.3", "signature.4", "signature.5", "signature.6", "signature.7", "signature.8", "signature.9", "signature.10", "signature.11", "signature.12", "signature.13", "signature.14", "signature.15", "signature.16", "signature.17", "signature.18", "signature.19", "signature.20", "signature.21", "signature.r1", "signature.r2", "signature.r3", "signature.u1", "signature.u2"), row.names = "a373r3", class = "data.frame"), a373r5 = structure(list(signature.1a = 0, signature.1b = 0, signature.2 = 0, signature.3 = 0.113996509522102, signature.4 = 0.114874220936966, signature.5 = 0.142056872670519, signature.6 = 0, signature.7 = 0, signature.8 = 0.208376707959741, signature.9 = 0.0744527503782136, signature.10 = 0, signature.11 = 0, signature.12 = 0, signature.13 = 0, signature.14 = 0, signature.15 = 0.0771902641012979, signature.16 = 0, signature.17 = 0, signature.18 = 0, signature.19 = 0, signature.20 = 0, signature.21 = 0, signature.r1 = 0, signature.r2 = 0, signature.r3 = 0, signature.u1 = 0.0673567355607731, signature.u2 = 0), .names = c("signature.1a", "signature.1b", "signature.2", "signature.3", "signature.4", "signature.5", "signature.6", "signature.7", "signature.8", "signature.9", "signature.10", "signature.11", "signature.12", "signature.13", "signature.14", "signature.15", "signature.16", "signature.17", "signature.18", "signature.19", "signature.20", "signature.21", "signature.r1", "signature.r2", "signature.r3", "signature.u1", "signature.u2"), row.names = "a373r5", class = "data.frame"), a373r9 = structure(list(signature.1a = 0, signature.1b = 0, signature.2 = 0, signature.3 = 0.116847300193985, signature.4 = 0, signature.5 = 0.21624751052703, signature.6 = 0, signature.7 = 0, signature.8 = 0.252498230882402, signature.9 = 0, signature.10 = 0, signature.11 = 0.119495912880994, signature.12 = 0, signature.13 = 0, signature.14 = 0, signature.15 = 0, signature.16 = 0, signature.17 = 0, signature.18 = 0, signature.19 = 0, signature.20 = 0, signature.21 = 0, signature.r1 = 0, signature.r2 = 0, signature.r3 = 0.0725549911220892, signature.u1 = 0, signature.u2 = 0), .names = c("signature.1a", "signature.1b", "signature.2", "signature.3", "signature.4", "signature.5", "signature.6", "signature.7", "signature.8", "signature.9", "signature.10", "signature.11", "signature.12", "signature.13", "signature.14", "signature.15", "signature.16", "signature.17", "signature.18", "signature.19", "signature.20", "signature.21", "signature.r1", "signature.r2", "signature.r3", "signature.u1", "signature.u2"), row.names = "a373r9", class = "data.frame"), a512r19 = structure(list(signature.1a = 0.109490572493859, signature.1b = 0, signature.2 = 0, signature.3 = 0, signature.4 = 0.22010156823306, signature.5 = 0, signature.6 = 0, signature.7 = 0, signature.8 = 0, signature.9 = 0, signature.10 = 0, signature.11 = 0, signature.12 = 0, signature.13 = 0, signature.14 = 0, signature.15 = 0, signature.16 = 0, signature.17 = 0, signature.18 = 0, signature.19 = 0, signature.20 = 0, signature.21 = 0, signature.r1 = 0, signature.r2 = 0, signature.r3 = 0.150943894106973, signature.u1 = 0.248556502648564, signature.u2 = 0.119306892617062), .names = c("signature.1a", "signature.1b", "signature.2", "signature.3", "signature.4", "signature.5", "signature.6", "signature.7", "signature.8", "signature.9", "signature.10", "signature.11", "signature.12", "signature.13", "signature.14", "signature.15", "signature.16", "signature.17", "signature.18", "signature.19", "signature.20", "signature.21", "signature.r1", "signature.r2", "signature.r3", "signature.u1", "signature.u2"), row.names = "a512r19", class = "data.frame")), .names = c("a373r11", "a373r13", "a373r3", "a373r5", "a373r9", "a512r19")) here, each row contains sample, , each column contains score particular signature:
> data[1] $a373r11 signature.1a signature.1b signature.2 signature.3 signature.4 signature.5 signature.6 signature.7 signature.8 signature.9 signature.10 signature.11 a373r11 0 0 0 0.1516317 0.1497999 0 0 0.06349126 0 0.1731892 0 0 signature.12 signature.13 signature.14 signature.15 signature.16 signature.17 signature.18 signature.19 signature.20 signature.21 signature.r1 signature.r2 a373r11 0 0 0 0 0 0 0 0 0 0.09055177 0 0 signature.r3 signature.u1 signature.u2 a373r11 0 0.1555907 0.1459555 i transfer dataframe following structure:
sample signature score a373r11 signature.1a 0 a373r11 signature.1b 0 [...] a373r13 signature.1a 0 a373r13 signature.1b 0 [...] can point me in right direction?
two approaches:
1) data.table-package
using:
library(data.table) melt(rbindlist(data, idcol = 'sample'), id = 'sample', variable.name = 'signature', value.name = 'score') gives:
sample signature score 1: a373r11 signature.1a 0.00000000 2: a373r13 signature.1a 0.00000000 3: a373r3 signature.1a 0.00000000 4: a373r5 signature.1a 0.00000000 5: a373r9 signature.1a 0.00000000 --- 158: a373r13 signature.u2 0.00000000 159: a373r3 signature.u2 0.07392018 160: a373r5 signature.u2 0.00000000 161: a373r9 signature.u2 0.00000000 162: a512r19 signature.u2 0.11930689
2) base r
using:
dat2 <- do.call(rbind, dat) reshape(dat2, idvar = 'sample', ids = row.names(dat2), varying = list(1:ncol(dat2)), times = colnames(dat2), timevar = 'signature', v.names = 'score', new.row.names = null, direction = 'long') gives:
signature score sample a373r11.signature.1a signature.1a 0.00000000 a373r11 a373r13.signature.1a signature.1a 0.00000000 a373r13 a373r3.signature.1a signature.1a 0.00000000 a373r3 a373r5.signature.1a signature.1a 0.00000000 a373r5 a373r9.signature.1a signature.1a 0.00000000 a373r9 ..... a373r13.signature.u2 signature.u2 0.00000000 a373r13 a373r3.signature.u2 signature.u2 0.07392018 a373r3 a373r5.signature.u2 signature.u2 0.00000000 a373r5 a373r9.signature.u2 signature.u2 0.00000000 a373r9 a512r19.signature.u2 signature.u2 0.11930689 a512r19
note:
it better not give data same name function. see ?data.
Comments
Post a Comment