Saya punya tabel di R yang memiliki str()
ini:
table [1:3, 1:4] 0.166 0.319 0.457 0.261 0.248 ...
- attr(*, "dimnames")=List of 2
..$ x: chr [1:3] "Metro >=1 million" "Metro <1 million" "Non-Metro Counties"
..$ y: chr [1:4] "q1" "q2" "q3" "q4"
Dan terlihat seperti ini ketika saya mencetaknya:
y
x q1 q2 q3 q4
Metro >=1 million 0.1663567 0.2612212 0.2670441 0.3053781
Metro <1 million 0.3192857 0.2480012 0.2341030 0.1986102
Non-Metro Counties 0.4570341 0.2044960 0.2121102 0.1263597
Saya ingin menyingkirkan x
dan y
dan mengubahnya menjadi sebuah frame data yang terlihat persis sama seperti di atas (tiga baris, empat kolom), tapi tanpa x
atau y
. Jika saya menggunakan as.data.frame(mytable)
, sebagai gantinya saya mendapatkan ini:
x y Freq
1 Metro >=1 million q1 0.1663567
2 Metro <1 million q1 0.3192857
3 Non-Metro Counties q1 0.4570341
4 Metro >=1 million q2 0.2612212
5 Metro <1 million q2 0.2480012
6 Non-Metro Counties q2 0.2044960
7 Metro >=1 million q3 0.2670441
8 Metro <1 million q3 0.2341030
9 Non-Metro Counties q3 0.2121102
10 Metro >=1 million q4 0.3053781
11 Metro <1 million q4 0.1986102
12 Non-Metro Counties q4 0.1263597
Saya mungkin pada dasarnya tidak mengerti bagaimana tabel berhubungan dengan frame data.
?xtabs
(bukan berarti lokasi yang paling jelas.)deparse.level = 0
(atau mungkin 2) dalam panggilan untuktable
Jawaban:
Saya sudah menemukan jawabannya:
melakukan apa yang saya butuhkan - rupanya, tabel perlu entah bagaimana dikonversi ke matriks agar dapat diterjemahkan secara tepat ke dalam kerangka data. Saya menemukan detail lebih lanjut tentang fungsi as.data.frame.matrix () ini untuk tabel kontingensi di blog Computational Ecology .
sumber
as.data.frame(mytable)
. (is.matrix(mytable)
akan mengungkapkan bahwa tabel benar-benar hanya berpakaian matriks, danas.data.frame.matrix
merupakan metode yang dikirim ketikaas.data.frame()
dilewati argumen matriks.)as.data.frame.table
sedang dikirim, bukan yang kurang spesifikas.data.frame.matrix
.row.names
. Saya telah berhasil menambahkan kolom menggunakanrow.names
nilai - nilai, tetapi saya lebih suka mencegahas.data.frame.matrix
penulisanrow.names
di tempat pertama ..as.data.frame.matrix(table(x))
memberi sayaError in seq_len(ncols) : argument must be coercible to non-negative integer
, sambilas.data.frame(table(x))
bekerja, di manax
hanya vektor numerikc(1,2,...)
Sementara hasilnya bervariasi dalam hal ini karena nama kolom adalah angka, cara lain yang saya gunakan adalah
data.frame(rbind(mytable))
. Menggunakan contoh dari @XX:Jika nama kolom tidak dimulai dengan angka, maka
X
tidak akan ditambahkan ke depannya.sumber
Jawaban singkat: menggunakan
as.data.frame.matrix(mytable)
, seperti yang disarankan oleh @Victor Van Hee.Jawaban panjang:
as.data.frame(mytable)
mungkin tidak berfungsi pada tabel kontingensi yang dihasilkan olehtable()
fungsi, bahkan jikais.matrix(your_table)
kembaliTRUE
. Itu masih akan mencairkan tabel Anda ke dalamfactor1 factor2 factori counts
format.Contoh:
sumber
Jika Anda menggunakan tidyverse , Anda dapat menggunakan
untuk mendapatkan tibble (yaitu bingkai data dengan beberapa variasi kecil dari kelas dasar)
sumber
Ini sulit
as.data.frame (mytable)
Alih-alih gunakan ini
perpustakaan ("quanteda")
convert (mytable, to = "data.frame")
sumber
convert
bukan bagian dari distribusi R normal. Saya punyacould not find function "convert"
perpustakaan apa yang Anda butuhkan untuk ini?