Misalkan, Anda memiliki data.frame seperti ini:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
Bagaimana Anda memilih hanya kolom-kolom dalam x yang numerik?
EDIT: diperbarui untuk menghindari penggunaan yang keliru sapply
.
Karena bingkai data adalah daftar, kita dapat menggunakan fungsi daftar-berlaku:
nums <- unlist(lapply(x, is.numeric))
Kemudian standar subsetting
x[ , nums]
## don't use sapply, even though it's less code
## nums <- sapply(x, is.numeric)
Untuk R modern yang lebih idiomatis sekarang saya sarankan
x[ , purrr::map_lgl(x, is.numeric)]
Lebih sedikit kode, kurang mencerminkan keanehan khusus R, dan lebih mudah, dan kuat untuk digunakan pada database-back-ended tibbles:
dplyr::select_if(x, is.numeric)
x[nums]
ataux[sapply(x,is.numeric)]
berfungsi juga. Dan mereka selalu kembalidata.frame
. Bandingkanx[1]
vsx[,1]
- pertama adalahdata.frame
, kedua adalah vektor. Jika seseorang ingin mencegah konversi maka harus digunakanx[, 1, drop=FALSE]
.undefined columns selected
. Bagaimana Anda menghindarinya?tryCatch()
untuk menangani ini. Silakan pertimbangkan untuk membuka pertanyaan baru.Fungsi paket dplyr
select_if(
) adalah solusi yang elegan:sumber
Filter()
dari paket dasar adalah fungsi yang sempurna untuk kasus penggunaan: Anda hanya perlu kode:Ini juga jauh lebih cepat daripada
select_if()
:mengembalikan (di komputer saya) median 60 mikrodetik untuk
Filter
, dan 21.000 mikrodetik untukselect_if
(350x lebih cepat).sumber
Filter()
tidak berfungsi untuk di sini adalah menggantikan, misalnyaFilter(is.numeric,iris) <- 0.5*Filter(is.numeric,iris)
tidak akan berfungsi.jika Anda hanya tertarik pada nama kolom maka gunakan ini:
sumber
Ini kode alternatif untuk jawaban lain:
dengan
data.table
sumber
sumber
Pustaka PCAmixdata memiliki fungsi splitmix yang membagi kuantitatif (data numerik) dan kualitatif (data kategorikal) dari dataframe "YourDataframe" yang diberikan seperti yang ditunjukkan di bawah ini:
sumber
Cara lain bisa sebagai berikut: -
sumber
Jika Anda memiliki banyak variabel faktor, Anda dapat menggunakannya
select_if
funtion. instal paket dplyr. Ada banyak fungsi yang memisahkan data dengan memenuhi suatu kondisi. Anda dapat mengatur kondisinya.Gunakan seperti ini.
sumber
Ini tidak langsung menjawab pertanyaan tetapi bisa sangat berguna, terutama jika Anda menginginkan sesuatu seperti semua kolom numerik kecuali untuk kolom id Anda dan variabel dependen.
sumber