Terima kasih! tapi saya punya masalah lain. Saya memiliki nama setiap kolom dalam larik karakter col_names []. Bagaimana saya bisa menggunakan perintah di atas (mydf $ col_names [i]) tidak berfungsi.
Rasoul
Adakah cara untuk melakukan ini secara otomatis untuk semua variabel karakter, seperti data.frame melakukannya dengan stringsAsFactors?
Etienne Low-Décarie
@ EtienneLow-Décarie: adil unclassdan gunakan data.framehasilnya,
IRTFM
Jawaban:
197
Hai, selamat datang di dunia R.
mtcars #look at this built in data set
str(mtcars)#allows you to see the classes of the variables (all numeric)#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)#another approach
mtcars[,'cyl']<- as.factor(mtcars[,'cyl'])
str(mtcars)# now look at the classes
Ini juga berfungsi untuk karakter, tanggal, bilangan bulat dan kelas lainnya
Karena Anda baru mengenal R, saya sarankan Anda melihat kedua situs web ini:
Terima kasih! tapi saya punya masalah lain. Saya memiliki nama setiap kolom dalam larik karakter col_names []. Bagaimana saya bisa menggunakan perintah di atas (tidak mydf$col_names[i]juga mydf[,col_names[i]]tidak berfungsi.)
Rasoul
1
@Rasoul, mydf[, col_names]akan melakukan ini
DrDom
3
+1 untuk referensi. Ini adalah hal-hal dasar, yang boleh untuk ditanyakan, tetapi juga baik untuk menyadari pekerjaan luas yang telah dimasukkan ke dalam karya-karya ini (dan sejenisnya).
Roman Luštrik
84
# To do it for all names
df[]<- lapply( df, factor)# the "[]" keeps the dataframe structure
col_names <- names(df)# do do it for some names in a vector named 'col_names'
df[col_names]<- lapply(df[col_names], factor)
Penjelasan. Semua dataframe adalah daftar dan hasil yang [digunakan dengan argumen bernilai banyak juga daftar, jadi perulangan daftar adalah tugas lapply. Tugas di atas akan membuat satu set daftar yang fungsi data.frame.[<-harus berhasil masuk kembali ke dalam kerangka data,df
Strategi lain adalah dengan mengonversi hanya kolom-kolom di mana jumlah item unik kurang dari beberapa kriteria, katakanlah lebih sedikit dari log jumlah baris sebagai contoh:
Ini adalah solusi yang sangat bagus! Ini juga dapat bekerja dengan nomor kolom yang mungkin sangat berguna jika Anda ingin mengubah banyak tetapi tidak semua. Misalnya, col_nums <- c (1, 6, 7: 9, 21:23, 27:28, 30:31, 39, 49:55, 57) lalu df [, col_nums] <- lapply (df [, col_nums] , faktor).
WGray
Peringatan: solusi pertama tidak berhasil jika length(col_names)==1. Dalam hal itu, df[,col_names]secara otomatis diturunkan ke vektor alih-alih daftar panjang 1, dan kemudian lapplymencoba untuk beroperasi pada setiap entri daripada kolom secara keseluruhan. Ini dapat dicegah dengan menggunakan df[,col_names,drop=FALSE].
P Schnell
Itu poin yang bagus. Doa lain yang akan mempertahankan status daftar adalah untuk digunakan df[col_names].
IRTFM
27
Anda dapat menggunakan dplyr::mutate_if()untuk mengonversi semua kolom karakter atau dplyr::mutate_at()untuk memilih kolom karakter bernama ke faktor:
library(dplyr)# all character columns to factor:
df <- mutate_if(df, is.character, as.factor)# select character columns 'char1', 'char2', etc. to factor:
df <- mutate_at(df, vars(char1, char2), as.factor)
Jika Anda ingin mengubah semua variabel karakter di data.frame menjadi faktor setelah Anda memuat data, Anda bisa melakukannya seperti ini, ke data.frame bernama dat:
Konversi lengkap dari setiap variabel karakter ke faktor biasanya terjadi ketika membaca data, misalnya dengan stringsAsFactors = TRUE, tetapi ini berguna ketika mengatakan, Anda sudah membaca data dengan read_excel()dari readxlpaket dan ingin melatih model hutan acak yang tidak menerima variabel karakter.
Sam Firke
13
Cara singkat lain yang bisa Anda gunakan adalah pipa ( %<>%) dari paket magrittr . Ini mengubah karakter kolom MyColumn untuk faktor.
Harap edit dengan informasi lebih lanjut. Jawaban khusus kode dan "coba ini" tidak disarankan, karena tidak mengandung konten yang dapat ditelusuri, dan jangan jelaskan mengapa seseorang harus "mencoba ini". Kami berusaha di sini untuk menjadi sumber pengetahuan.
Brian Tompsett - 汤 莱恩
tolong jika saya tidak ingin menggunakannya untuk semua kolom df saya?
Mostafa
5
Saya sudah melakukannya dengan fungsi. Dalam hal ini saya hanya akan mengubah variabel karakter menjadi faktor:
unclass
dan gunakandata.frame
hasilnya,Jawaban:
Hai, selamat datang di dunia R.
Ini juga berfungsi untuk karakter, tanggal, bilangan bulat dan kelas lainnya
Karena Anda baru mengenal R, saya sarankan Anda melihat kedua situs web ini:
Manual rujukan: http://cran.r-project.org/manuals.html
R Kartu referensi: http://cran.r-project.org/doc/contrib/Short-refcard.pdf
sumber
mydf$col_names[i]
jugamydf[,col_names[i]]
tidak berfungsi.)mydf[, col_names]
akan melakukan iniPenjelasan. Semua dataframe adalah daftar dan hasil yang
[
digunakan dengan argumen bernilai banyak juga daftar, jadi perulangan daftar adalah tugaslapply
. Tugas di atas akan membuat satu set daftar yang fungsidata.frame.[<-
harus berhasil masuk kembali ke dalam kerangka data,df
Strategi lain adalah dengan mengonversi hanya kolom-kolom di mana jumlah item unik kurang dari beberapa kriteria, katakanlah lebih sedikit dari log jumlah baris sebagai contoh:
sumber
length(col_names)==1
. Dalam hal itu,df[,col_names]
secara otomatis diturunkan ke vektor alih-alih daftar panjang 1, dan kemudianlapply
mencoba untuk beroperasi pada setiap entri daripada kolom secara keseluruhan. Ini dapat dicegah dengan menggunakandf[,col_names,drop=FALSE]
.df[col_names]
.Anda dapat menggunakan
dplyr::mutate_if()
untuk mengonversi semua kolom karakter ataudplyr::mutate_at()
untuk memilih kolom karakter bernama ke faktor:sumber
Jika Anda ingin mengubah semua variabel karakter di data.frame menjadi faktor setelah Anda memuat data, Anda bisa melakukannya seperti ini, ke data.frame bernama
dat
:Ini menciptakan vektor yang mengidentifikasi kolom mana dari kelas
character
, lalu berlakuas.factor
untuk kolom tersebut.Contoh data:
sumber
stringsAsFactors = TRUE
, tetapi ini berguna ketika mengatakan, Anda sudah membaca data denganread_excel()
darireadxl
paket dan ingin melatih model hutan acak yang tidak menerima variabel karakter.Cara singkat lain yang bisa Anda gunakan adalah pipa (
%<>%
) dari paket magrittr . Ini mengubah karakter kolom MyColumn untuk faktor.sumber
Saya sudah melakukannya dengan fungsi. Dalam hal ini saya hanya akan mengubah variabel karakter menjadi faktor:
sumber
[[i]]