简体   繁体   中英

How to “back” melt function from reshape2 package?

That's my data:

> head(data)

    id C1 C2 C3 B1 B2 B3 Name
    12 3  12 8  1  3  12 Agar
    14 4  11 9  5  12 14 LB
    18 7  17 6  7  14 16 YEF
    20 9  15 4  3  11 17 KAN

so I used a melt function from reshape2 package to reorganize my data. Now it looks like that:

dt <- melt(data, measure.vars=2:7)

> head(dt)

   n    v variable value   rt
1 id Name        p    C1   1
2 12 Agar        p     3   2
3 14   LB        p     4   3
4 18  YEF        p     7   6
5 20  KAN        p     9   3
6 id Name        u    C2   1

I did some calculations on my data and now there is an extra column. Let's call it "rt". I'd like to transform my data now to the previous "state" with this an extra column. Do you know any function which would be useful ?

dput(dt)
structure(list(n = structure(c(5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L), class = "factor", .Label = c("12", "14", 
"18", "20", "id")), v = structure(c(4L, 1L, 3L, 5L, 2L, 4L, 1L, 
3L, 5L, 2L, 4L, 1L, 3L, 5L, 2L, 4L, 1L, 3L, 5L, 2L, 4L, 1L, 3L, 
5L, 2L, 4L, 1L, 3L, 5L, 2L), class = "factor", .Label = c("Agar", 
"KAN", "LB", "Name", "YEF")), variable = structure(c(1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 
4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("p", 
"u", "k", "l", "t", "h"), class = "factor"), value = c("C1", 
"3", "4", "7", "9", "C2", "12", "11", "17", "15", "C3", "8", 
"9", "6", "4", "B1", "1", "5", "7", "3", "B2", "3", "12", "14", 
"11", "B3", "12", "14", "16", "17")), .Names = c("n", "v", "variable", 
"value"), row.names = c(NA, -30L), class = "data.frame")

In the "reshape2" universe, melt and *cast go hand-in-hand.

Here's an example of melt ing a data.frame and dcast ing it back to its original form. You would need to take a similar approach with your data.

mydf <- data.frame(A = LETTERS[1:3], B = 1:3, C = 4:6)
mydf
#   A B C
# 1 A 1 4
# 2 B 2 5
# 3 C 3 6

library(reshape2)

mDF <- melt(mydf, id.vars="A")
mDF
dcast(mDF, A ~ variable, value.var="value")
#   A B C
# 1 A 1 4
# 2 B 2 5
# 3 C 3 6

In the dcast step, think of the items before the ~ as being the "id" variables, and those coming after as being the resulting column names. value.var should be the column from which the values will fill in the resulting "grid" created by the id variables and column names.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM