Saya memiliki dataframe dan daftar kolom dalam dataframe yang ingin saya hapus. Mari gunakan iris
dataset sebagai contoh. Saya ingin melepas Sepal.Length
dan Sepal.Width
dan hanya menggunakan kolom yang tersisa. Bagaimana cara melakukannya menggunakan select
atau select_
dari dplyr
paket?
Inilah yang saya coba sejauh ini:
drop.cols <- c('Sepal.Length', 'Sepal.Width')
iris %>% select(-drop.cols)
Kesalahan dalam -drop.cols: argumen tidak valid ke operator unary
iris %>% select_(.dots = -drop.cols)
Kesalahan dalam -drop.cols: argumen tidak valid ke operator unary
iris %>% select(!drop.cols)
Kesalahan dalam! Drop.cols: tipe argumen tidak valid
iris %>% select_(.dots = !drop.cols)
Kesalahan dalam! Drop.cols: tipe argumen tidak valid
Saya merasa seperti saya kehilangan sesuatu yang jelas karena ini sepertinya operasi yang cukup berguna yang seharusnya sudah ada. Di Github, seseorang memposting masalah serupa , dan Hadley mengatakan untuk menggunakan 'pengindeksan negatif'. Itulah yang (menurut saya) saya coba, tetapi tidak berhasil. Ada saran?
iris
, tetapi tidak pada kerangka data saya yang sebenarnya (iris
adalah contoh mainan). Dataframe saya berisi 4558 baris dan 147 kolom. Pesan kesalahan yang saya terima adalahError in eval(x$expr, data, x$env) : variable names are limited to 10000 bytes
. Adakah yang tahu mengapa ini mungkin terjadi?select_vars
sebagai gantinyaselect
. Sekarang bekerja dengan sempurna!one_of
? Kecuali saya melewatkan sesuatu, itu tidak muncul di dokumentasi paket (help(package='dplyr')
).help(one_of, package = "dplyr")
. Setidaknya dalam versi paket 0.5.0. Tapi ada baiknya membaca blog yang Hadley posting ketika ada update ke salah satu paketnya. Dan beberapa fungsi didokumentasikan di dalam fungsi lainnya. Sayangnya itu membutuhkan membaca semua dokumentasi, yang kebanyakan saya lakukan ketika saya menginginkan sesuatu yang tidak segera terlihat atau mungkin dengan fungsinya.juga coba
sumber
Di luar
select(-one_of(drop.cols))
ada beberapa opsi lain untuk menjatuhkan kolom menggunakanselect()
yang tidak melibatkan mendefinisikan semua nama kolom tertentu (menggunakan data sampel dplyr starwars untuk beberapa variasi lagi dalam nama kolom):sumber
select_if(~!is.list(.))
setara denganselect_if(is.list(.))
?~
adalah singkatan purrr untuk mendefinisikan suatu fungsi anonamous, itu bukan simbol lain untuk tidak. Misalnya keduanya memiliki arti yang samafunction(x) {!is.list(x)}
dan~!is.list(.)
. anggap~
sebagai singkatanfunction(.)
.Berhati-hatilah dengan
select()
fungsinya, karena ini digunakan baik di paket dplyr dan MASS, jadi jika MASS dimuat, pilih () mungkin tidak berfungsi dengan benar. Untuk mengetahui paket apa saja yang dimuat, ketiksessionInfo()
dan cari di bagian "paket terlampir lainnya:". Jika dimuat, ketikdetach( "package:MASS", unload = TRUE )
, danselect()
fungsi Anda akan berfungsi kembali.sumber
dplyr::select()
.dselect <- dplyr::select()
.Kita dapat mencoba
sumber
dplyr
kemampuan untuk membuat tugas analisis dasar mudah dibaca dan ditulis, saya kecewa karena solusi yang sebenarnya tampak seperti solusi.one_of
solusi lain adalah cara untuk pergi. Saya lupa tentang itu.Cara lain adalah dengan mengubah kolom yang tidak diinginkan menjadi
NULL
, ini menghindari tanda kurung yang disematkan:sumber
Jika Anda memiliki karakter khusus dalam nama kolom, salah satu
select
atauselect_
mungkin tidak berfungsi seperti yang diharapkan. Propertidplyr
penggunaan ini"."
. Untuk merujuk ke kumpulan data dalam pertanyaan, baris berikut dapat digunakan untuk menyelesaikan masalah ini:sumber
Anda dapat mencoba
sumber