Schmelze zu zwei variable Spalten
Frage
Ich habe folgende Variablen in einem Datenrahmen:
[1] "Type" "I.alt" "idx06" "idx07" "idx08" "farve1" "farve2"
Wenn ich das tue:
dm <- melt(d, id=c("Type","I.alt"))
ich diese Variablen erhalten:
"Type" "I.alt" "variable" "value"
Wo "idx06", "idx07", "idx08", "farve1", "farve2" in "Variable" dargestellt.
Aber was ich wirklich will, ist so etwas wie folgt aus:
"Type" "I.alt" "variable" "value" "variable2" "value2"
Wo "farve1" und "farve2" sind in variable2 und Wert2 dargestellt.
Der Grund, warum ich dies tun möchte, ist, dass ich etwas möchte, wo die Linienfarbe ist grün, wenn der Wert fällt und rot, wenn steigen. EDIT: Shane hat gezeigt, wie die Daten neu zu gestalten über zwei Schmelzen verschmolzen. Aber meine Strategie Nähte schlecht von Anfang an konzipiert werden - FALSCH in einem Wort. Sehen Sie meinen Kommentar zu Shane Lösung.
ggplot(dm, aes(x=variable,y=value,group=Type,col=variable2, label=Type,size=I.alt))+
geom_line()+
geom_text(data=subset(dm, variable=="idx08"),hjust=-0.2, size=2.5)+
theme_bw()+
scale_x_discrete(expand=c(0,1))+
opts(legend.position="none")
Ich nehme an, ich brauche den geschmolzenen Rahmen zu werfen - aber ich kann es nicht herausgefunden. Die Daten:
d <- structure(list(Type = structure(c(8L, 21L, 23L, 20L, 6L, 14L,
3L, 24L, 2L, 28L, 32L, 22L, 15L, 29L, 1L, 17L, 18L, 33L, 25L,
13L, 30L, 11L, 26L, 9L, 12L, 4L, 5L, 27L, 16L, 19L, 10L, 31L,
7L), .Label = c("Alvorligere vold", "Andre strafferetlige særlove",
"Andre tyverier", "Bedrageri", "Brandstiftelse", "Butikstyverier m.v.",
"Dokumentfalsk", "Færdselslovovertræd. i øvrigt", "Færdselsuheld med spiritus",
"Falsk forklaring i øvrigt", "Forbr. mod off. myndighed m.v.",
"Freds- og ærekrænkelser", "Hæleri", "Hærværk", "Indbrud i bank, forretn. m.v.",
"Indbrud i fritidshuse, garager mv", "Indbrud i villaer, lejligheder mv",
"Love vedr. forsvaret og lign.", "Love vedr. spil, bev., næring",
"Lov om euforiserende stoffer", "Mangler ved køretøj", "Røveri",
"Simpel vold", "Spiritus- og promillekørsel", "Trusler", "Tyv./brugstyv. af andet",
"Tyv./brugstyv. af cykel", "Tyv./brugstyv. af indr. køretøj",
"Tyv/brugstyv. af knallert", "Tyveri fra bil, båd m.v.", "Ulovlig omgang med hittegods",
"Våbenloven", "Vold o.l. mod off. myndighed"), class = "factor"),
I.alt = c(16137L, 9519L, 5930L, 5502L, 4887L, 3582L, 3101L,
1738L, 1660L, 1649L, 1551L, 1412L, 1338L, 1164L, 1154L, 1057L,
931L, 907L, 857L, 724L, 681L, 644L, 641L, 505L, 450L, 419L,
405L, 328L, 324L, 324L, 320L, 281L, 262L), idx06 = c(1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), idx07 = c(0.972675591417568,
0.766866371450899, 0.931743805516597, 0.813047711781889,
0.88728323699422, 0.96420233463035, 0.855743544078362, 1.03710247349823,
0.751470588235294, 0.90443686006826, 0.808403361344538, 0.902834008097166,
0.718181818181818, 0.904555314533623, 1.02717391304348, 0.68957345971564,
1.10324483775811, 0.93030303030303, 0.805309734513274, 0.843003412969283,
0.74914089347079, 0.824786324786325, 1.04060913705584, 1.09150326797386,
0.977941176470588, 0.892405063291139, 0.966666666666667,
0.828125, 0.696, 0.813559322033898, 0.697841726618705, 0.88235294117647,
0.62280701754386), idx08 = c(0.986612873647533, 0.712685595207085,
0.840579710144927, 0.865628042843233, 0.93757225433526, 0.823346303501945,
0.905609973285841, 1.03356890459364, 0.689705882352941, 0.909556313993174,
0.798319327731092, 0.955465587044534, 0.714545454545455,
0.620390455531453, 1.10869565217391, 0.815165876777251, 0.64306784660767,
0.818181818181818, 0.722713864306785, 0.627986348122867,
0.59106529209622, 0.927350427350427, 1.21319796954315, 1.20915032679739,
1.33088235294118, 0.759493670886076, 1.40833333333333, 0.734375,
0.896, 0.932203389830508, 0.60431654676259, 0.872549019607843,
0.675438596491228), farve1 = c("green", "green", "green",
"green", "green", "green", "green", "red", "green", "green",
"green", "green", "green", "green", "red", "green", "red",
"green", "green", "green", "green", "green", "red", "red",
"green", "green", "green", "green", "green", "green", "green",
"green", "green"), farve2 = c("red", "green", "green", "red",
"red", "green", "red", "green", "green", "red", "green",
"red", "green", "green", "red", "red", "green", "green",
"green", "green", "green", "red", "red", "red", "red", "green",
"red", "green", "red", "red", "green", "green", "red")), .Names = c("Type",
"I.alt", "idx06", "idx07", "idx08", "farve1", "farve2"), class = "data.frame", row.names = c(NA, -33L))
Lösung
Das beantwortet nicht Ihre Frage zu Besetzung, aber man könnte sicherlich Teilmenge und zwei Schmelzen tun, durch eine Zusammenführung gefolgt:
dm1 <- melt(d[,c("Type","I.alt","idx06","idx07","idx08")], id=c("Type","I.alt"))
dm2 <- melt(d[,c("Type","I.alt","farve1","farve2")], id=c("Type","I.alt"))
colnames(dm2) <- c("Type", "I.alt", "variable2", "value2")
dm <- merge(dm1, dm2)
oder äquivalent, wählen Sie eine Schmelze dann (wie Sie gerade tun) Teilmenge der Datenrahmen zweimal (idx <- variable %in% c("idx06","idx07","idx08"
) als ein und !idx
als andere geschmolzen) und merge, dass die Ausgabe.
Wie auch immer Sie bekommen, was Sie wollen:
> head(dm)
Type I.alt variable value variable2 value2
1 Alvorligere vold 1154 idx08 1.108696 farve1 red
2 Alvorligere vold 1154 idx08 1.108696 farve2 red
3 Alvorligere vold 1154 idx07 1.027174 farve1 red
4 Alvorligere vold 1154 idx07 1.027174 farve2 red
5 Alvorligere vold 1154 idx06 1.000000 farve1 red
6 Alvorligere vold 1154 idx06 1.000000 farve2 red