Saya ingin membuat vektor dari deretan bingkai data. Tapi saya tidak ingin nama baris dan kolom. Saya mencoba beberapa hal ... tetapi tidak berhasil.
Ini bingkai data saya:
> df <- data.frame(a=c(1,2,4,2),b=c(2,6,2,1),c=c(2.6,8.2,7.5,3))
> df
a b c
1 1 2 2.6
2 2 6 8.2
3 4 2 7.5
4 2 1 3.0
Saya mencoba:
> newV <- as.vector(df[1,])
> newV
a b c
1 1 2 2.6
Tapi saya sangat menginginkan sesuatu yang terlihat seperti ini:
> newV <- c( 1,2,2.6)
> newV
[1] 1.0 2.0 2.6
c(t(as.matrix(df)))
?Jawaban:
Saat Anda mengekstrak satu baris dari bingkai data, Anda mendapatkan bingkai data satu baris. Ubah menjadi vektor numerik:
Seperti yang disarankan @Roland,
unlist(df[1,])
akan mengonversi bingkai data satu baris menjadi vektor numerik tanpa menghilangkan namanya. Oleh karena itu,unname(unlist(df[1,]))
ada cara lain yang sedikit lebih eksplisit untuk mendapatkan hasil yang sama.Seperti komentar @Josh di bawah ini, jika Anda memiliki bingkai data yang tidak sepenuhnya numerik (alfabet, faktor, campuran ...), Anda memerlukannya
as.character(df[1,])
.sumber
identical(unlist(df[1,], use.names = FALSE), as.numeric(df[1,]))
(dan btw df masih bukan nama yang masuk akal untuk data.frame ... ;-))Saya merekomendasikan
unlist
, yang menyimpan nama.Jika Anda tidak ingin vektor bernama:
sumber
Jika Anda tidak ingin mengubah ke numerik, Anda dapat mencoba ini.
sumber
str(as.vector(t(df)[,1]))
adalahnum [1:3] 1 2 2.6
, yaitu, kode Anda mengubah hasil menjadi vektor numerik ...t(df)
R memaksa bingkai data menjadi matriks, dalam hal ini matriks numerik karena semua elemennya numerik. Kemudian[,1]
mengekstrak kolom pertama (vektor numerik, karena dimensi redundan secara otomatis dihapus).as.vector()
hanya menjatuhkan nama (yang juga dapat Anda lakukan denganunname()
).unname(unlist(x))
solusinya sedikit lebih baik (lebih efisien dan lebih transparan).as.vector(t(df)[,1])
Aku menyukainya ! Persis apa yang saya butuhkan!Berikut adalah
dplyr
opsi berbasis:sumber
Perhatikan bahwa Anda harus berhati-hati jika baris Anda mengandung faktor. Berikut ini contohnya:
Berikut adalah contoh lain (secara default data.frame () mengonversi karakter menjadi faktor)
Untuk mencegah perilaku ini, Anda perlu memperhatikan faktornya, sebelum mengekstraknya:
sumber
Kolom bingkai data sudah menjadi vektor, Anda hanya perlu menariknya keluar. Perhatikan bahwa Anda menempatkan kolom yang Anda inginkan setelah koma, bukan sebelumnya:
Jika Anda benar-benar menginginkan baris, lakukan apa yang Ben katakan dan tolong gunakan kata-kata dengan benar di masa depan.
sumber