Lebih
Drop data frame kolom dengan nama
Saya memiliki jumlah kolom yang ingin saya hapus dari data frame. Saya tahu bahwa kita dapat menghapusnya secara individual menggunakan sesuatu seperti:
df$x <- NULL
Tapi saya berharap untuk melakukan hal ini dengan perintah lebih sedikit.
Juga, saya tahu bahwa saya bisa drop kolom menggunakan integer indeks seperti ini:
df <- df[ -c(1, 3:6, 12) ]
Tapi saya khawatir bahwa posisi relatif dari variabel saya dapat berubah.
Mengingat betapa kuat R adalah, saya pikir mungkin ada cara yang lebih baik daripada menjatuhkan setiap kolom satu per satu.
799
19
Anda dapat menggunakan sederhana daftar nama-nama :
Ada's juga
bagian
perintah, yang berguna jika anda tahu mana kolom yang anda inginkan:mungkin yang paling mudah, atau untuk beberapa variabel:
Atau jika anda're berurusan dengan `data.tabel (per https://stackoverflow.com/q/9202413):
atau untuk beberapa variabel
Anda bisa menggunakan
%di%
seperti ini:daftar(NULL) juga bekerja:
Jika anda ingin menghapus kolom dengan referensi dan menghindari internal menyalin yang terkait dengan
data.frame
maka anda dapat menggunakandata.tabel paket
dan fungsi:=
Anda dapat melewati karakter vektor nama ke sisi kiri
:=
operator, danNULL
sebagai RHS.Ada berpotensi lebih kuat strategi didasarkan pada kenyataan bahwa grep() akan mengembalikan vektor numerik. Jika anda memiliki daftar panjang dari variabel-variabel seperti yang saya lakukan di salah satu kumpulan data saya, beberapa variabel yang berakhir pada "." dan lain-lain yang akhirnya di ".B" dan anda hanya ingin orang-orang itu di ".A" (bersama dengan semua variabel yang don't mencocokkan pola, lakukan ini:
Lain
dplyr
jawaban. Jika variabel anda memiliki beberapa kesamaan struktur penamaan, anda mungkin mencobastarts_with()
. MisalnyaKeluar dari bunga, bendera ini sampai salah satu dari R's aneh beberapa sintaks inkonsistensi. Misalnya diberikan dua kolom data frame:
Kemungkinan lain:
Dplyr Solusi
Saya ragu ini akan mendapatkan banyak perhatian di sini, tetapi jika anda memiliki daftar kolom yang ingin anda hapus, dan anda ingin melakukannya dalam
dplyr
rantai saya menggunakanone_of()
dalampilih
ayat:Berikut ini adalah sederhana, reproducable contoh:
Berikut adalah
dplyr
cara untuk pergi tentang itu:Aku seperti ini karena itu's intuitif untuk membaca & mengerti tanpa penjelasan dan kuat untuk kolom mengubah posisi dalam data frame. Hal ini juga mengikuti vectorized idiom menggunakan
-
untuk menghapus elemen.Aku terus berpikir pasti ada yang lebih baik idiom, tetapi untuk pengurangan kolom dengan nama, saya cenderung untuk melakukan hal-hal berikut:
Ada's sebuah fungsi yang disebut
dropNamed()
di Bernd Bischl'sBBmisc
paket yang tidak tepat ini.Keuntungan adalah bahwa ia menghindari pengulangan data frame argumen dan dengan demikian cocok untuk pipa dalam
magrittr
(sepertidplyr
pendekatan):Solusi lain jika anda don't ingin menggunakan @hadley's atas: Jika "COLUMN_NAME" adalah nama kolom yang ingin anda drop:
Di luar
pilih(-one_of(drop_col_names))
ditunjukkan dalam jawaban sebelumnya, ada beberapa lainnyadplyr
pilihan untuk menjatuhkan kolom menggunakanselect()
yang tidak melibatkan mendefinisikan semua spesifik nama-nama kolom (menggunakan dplyr starwars data sampel untuk beberapa variasi dalam nama-nama kolom):Memberikan data frame dan string *koma nama* untuk menghapus:
Menemukan indeks kolom yang ingin anda tarik menggunakan
yang
. Memberikan indeks ini tanda negatif (*-1
). Maka subset pada nilai-nilai tersebut, yang akan menghapus mereka dari dataframe. Ini adalah contoh.