Konteksnya, saya ingin melebur kerangka data deret waktu yang luas menjadi kerangka data yang panjang. Dengan cara ini saya dapat memplot data dalam ggplot2 dan membuat grafik area bertumpuk. Rangkaian waktu tidak teratur (tidak ada akhir pekan dan hari libur)

Bingkai data saat ini terlihat seperti

df
    date        item_1    item_2     item_3 ...
1 1992-03-23      8.63     7.609     1.6546 ...
2 1992-03-24      7.98     7.634     1.6533 ... 
...

Bagaimana cara mengubah bingkai data di atas menjadi

    date        variable    value
1 1992-03-23    item_1       8.63
2 1992-03-23    item_2      7.609
3 1992-03-23    item_3     1.6546
2 1992-03-24    item_1       7.98

Menggunakan kode berikut saya mendapatkan kesalahan

> melted_df = melt(df)
Using as id variables
Error in as.Date.numer(value): 'origin' must be supplied
r
0
LascieL 16 Maret 2017, 19:43

2 jawaban

Jawaban Terbaik

Anda harus menentukan id.vars sebagai argumen kedua dalam fungsi lelehan dan berfungsi:

require(reshape)
df <- data.frame(date = as.Date(c("1992-03-23", "1992-03-24")),
                 item_1 = c(8.63, 7.98),
                 item_2 = c(7.609, 7.634),
                 item_3 = c(1.6546, 1.6533))

melt(df, "date")

Kamu akan mendapatkan:

        date variable  value
1 1992-03-23   item_1 8.6300
2 1992-03-24   item_1 7.9800
3 1992-03-23   item_2 7.6090
4 1992-03-24   item_2 7.6340
5 1992-03-23   item_3 1.6546
6 1992-03-24   item_3 1.6533

Semoga ini membantu

1
Codutie 16 Maret 2017, 16:56

Atau dengan gather

library(tidyverse)

df <- data.frame(date = as.Date(c("1992-03-23", "1992-03-24")),
                 item_1 = c(8.63, 7.98),
                 item_2 = c(7.609, 7.634),
                 item_3 = c(1.6546, 1.6533))

df %>% gather(variable, value, -date)

Memberi,

        date variable  value
1 1992-03-23   item_1 8.6300
2 1992-03-24   item_1 7.9800
3 1992-03-23   item_2 7.6090
4 1992-03-24   item_2 7.6340
5 1992-03-23   item_3 1.6546
6 1992-03-24   item_3 1.6533
0
Lyngbakr 16 Maret 2017, 17:22