Cara memperluas bingkai data di R


15

Saya mengalami masalah saat melakukan beberapa analisis dengan R.

Saya memiliki kerangka data seperti ini:

Name | Group | Count
Person 1 | A | 3
Person 2 | A | 1
Person 3 | A | 0
Person 1 | B | 5 
Person 2 | B | 0
Person 3 | B | 1
Person 1 | C | 1

Dan saya perlu "mengembangkan" itu (tidak yakin apakah istilah yang tepat) menjadi seperti ini:

Person 1 | A
Person 1 | A
Person 1 | A
Person 2 | A
Person 1 | B
Person 1 | B

dll.

Jadi dibutuhkan nilai pasangan Person 1 dan A (dalam contoh ini, 3) dan membuat tiga baris dengan Person 1 dan A dan melakukannya untuk setiap Orang - Grup-kombinasi. Tidak dapat menemukan kata-kata bagus untuk pencarian online.



Anda harus menjelajahi reshape2paket dalam R. Ini mungkin juga membantu untuk dput2 contoh kerangka data: satu dengan input dan satu dengan output.
Zach

Saya memberikan jawaban tetapi saya kira ini lebih merupakan pertanyaan pemrograman R daripada pertanyaan statistik, jadi mungkin itu harus dimigrasi ke tempat lain.
Gala

Terima kasih Gaël untuk jawaban dan membantu memformat dalam pertanyaan saya.
Juha-Matti S.

Jawaban:


10

Meskipun ini adalah paket yang sangat berguna, saya pikir membentuk kembali terlalu banyak dalam hal ini, perwakilan dapat melakukan pekerjaan.

Berikut adalah beberapa contoh data:

df <- data.frame(
     name=c("Person 1", "Person 2", "Person 3", "Person 1", "Person 2", "Person 3"),
     group=c("A", "A", "A", "B", "B", "B"),
     count=c(3,1,0,5,0,1))

Sekarang, untuk "memperluas" itu:

expanded <- data.frame(name = rep(df$name, df$count),
                       group = rep(df$group, df$count))

Saya tidak dapat menemukan cara untuk bekerja secara langsung pada kerangka data dari atas kepala saya jadi saya bekerja pada masing-masing variabel secara terpisah dan kemudian memasang kembali mereka, yang agak jelek tapi harus OK selama Anda berhati-hati selalu menggunakan variabel yang sama untuk jumlah.


7
Bagaimana dengan ini df[rep(seq_len(nrow(df)), df$count), 1:2]:?
chl

@ chl, Anda pak brilian!
Chris

15

Anda dapat menggunakan fungsi yang tidak dapat dijalankan dari paket membentuk kembali.

Diberikan df di atas (oleh @ Gaël Laurans)

library(reshape)

expanded<-untable(df[,c(1,2)], num=df[,3])

name group
1   Person 1     A
1.1 Person 1     A
1.2 Person 1     A
2   Person 2     A
4   Person 1     B
4.1 Person 1     B
4.2 Person 1     B
4.3 Person 1     B
4.4 Person 1     B
6   Person 3     B

untabletidak persis apa yang saya sebutkan dalam komentar saya :-) Terima kasih telah mengingatkan saya tentang fungsi itu!
chl

1

Dan uncountmulai tidyrsekarang memberikan hasil yang sama seperti di atas.

library(tidyr)
df %>% uncount(Count)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.