Saya menggunakan R dan telah memuat data ke dalam dataframe menggunakan read.csv()
. Bagaimana cara menentukan tipe data setiap kolom dalam bingkai data?
str(...)
tidak scalable dan kehabisan tenaga pada <100 cols.
Saya menggunakan R dan telah memuat data ke dalam dataframe menggunakan read.csv()
. Bagaimana cara menentukan tipe data setiap kolom dalam bingkai data?
str(...)
tidak scalable dan kehabisan tenaga pada <100 cols.
Jawaban:
Taruhan terbaik Anda untuk memulai adalah menggunakan ?str()
. Untuk menjelajahi beberapa contoh, mari kita buat beberapa data:
set.seed(3221) # this makes the example exactly reproducible
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE, TRUE, FALSE, FALSE, FALSE),
X3=letters[1:5])
Solusi @Wilmer E Henao H sangat efisien:
sapply(my.data, class)
y x1 x2 X3
"numeric" "integer" "logical" "factor"
Menggunakan str()
memberi Anda informasi plus barang tambahan (seperti tingkat faktor Anda dan beberapa nilai pertama dari setiap variabel):
str(my.data)
'data.frame': 5 obs. of 4 variables:
$ y : num 1.03 1.599 -0.818 0.872 -2.682
$ x1: int 1 2 3 4 5
$ x2: logi TRUE TRUE FALSE FALSE FALSE
$ X3: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
Pendekatan @Gavin Simpson juga ramping, tetapi memberikan informasi yang sedikit berbeda dari class()
:
sapply(my.data, typeof)
y x1 x2 X3
"double" "integer" "logical" "integer"
Untuk informasi lebih lanjut tentang class
,, typeof
dan anak tengah mode
, lihat utas SO yang luar biasa ini: Survei komprehensif tentang berbagai hal dalam R. 'mode' dan 'class' dan 'typeof' tidak cukup .
str(dataframe)
adalah cara tercepat untuk menentukan jenis kolom secara sekilas. Pendekatan lain membutuhkan lebih banyak penekanan tombol dan tidak menunjukkan informasi sebanyak mungkin, tetapi mereka membantu jika tipe data kolom merupakan input ke fungsi lain.
apply()
? Itu untuk matriks. Kerangka data adalah daftar (jenis khusus).
sapply(yourdataframe, class)
Di mana bingkai data Anda adalah nama bingkai data yang Anda gunakan
saya akan menyarankan
sapply(foo, typeof)
jika Anda membutuhkan jenis aktual vektor dalam bingkai data. class()
agak binatang yang berbeda.
Jika Anda tidak perlu mendapatkan informasi ini sebagai vektor (yaitu Anda tidak perlu melakukan hal lain secara terprogram nanti), gunakan saja str(foo)
.
Dalam kedua kasus foo
akan diganti dengan nama bingkai data Anda.
Cukup berikan bingkai data Anda ke fungsi berikut:
data_types <- function(frame) {
res <- lapply(frame, class)
res_frame <- data.frame(unlist(res))
barplot(table(res_frame), main="Data Types", col="steelblue", ylab="Number of Features")
}
untuk menghasilkan plot semua tipe data dalam bingkai data Anda. Untuk dataset iris, kami mendapatkan yang berikut:
data_types(iris)
Untuk bingkai data kecil:
library(tidyverse)
as_tibble(mtcars)
memberi Anda hasil cetak df dengan tipe data
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
* <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
Untuk bingkai data besar:
glimpse(mtcars)
memberi Anda pandangan terstruktur dari tipe data:
Observations: 32
Variables: 11
$ mpg <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17....
$ cyl <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, ...
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 167.6, 167.6...
$ hp <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180, 205, 215...
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3.0...
$ wt <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.440, 3.440...
$ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18.30, 18.90...
$ vs <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, ...
$ am <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, ...
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, ...
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, ...
Untuk mendapatkan daftar tipe data kolom (seperti yang dikatakan oleh @Alexandre di atas):
map(mtcars, class)
memberikan daftar tipe data:
$mpg
[1] "numeric"
$cyl
[1] "numeric"
$disp
[1] "numeric"
$hp
[1] "numeric"
Untuk mengubah tipe data kolom:
library(hablar)
mtcars %>%
convert(chr(mpg, am),
int(carb))
mengonversi kolom mpg
dan am
ke karakter dan kolom carb
ke integer:
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <int>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
Karena tidak dinyatakan dengan jelas, saya hanya menambahkan ini:
Saya sedang mencari cara untuk membuat tabel yang menampung jumlah kemunculan semua tipe data .
Katakanlah kita memiliki data.frame
kolom dua angka dan satu logis
dta <- data.frame(a = c(1,2,3),
b = c(4,5,6),
c = c(TRUE, FALSE, TRUE))
Anda dapat meringkas jumlah kolom dari setiap tipe data dengan itu
table(unlist(lapply(dta, class)))
# logical numeric
# 1 2
Ini sangat berguna, jika Anda memiliki banyak kolom dan ingin mendapatkan ikhtisar cepat.
Untuk memberikan kredit: Solusi ini terinspirasi oleh jawaban @Cybernetic .
Berikut adalah fungsi yang merupakan bagian dari paket helpRFunctions yang akan mengembalikan daftar semua tipe data yang berbeda dalam bingkai data Anda, serta nama variabel spesifik yang terkait dengan tipe itu.
install.package('devtools') # Only needed if you dont have this installed.
library(devtools)
install_github('adam-m-mcelhinney/helpRFunctions')
library(helpRFunctions)
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE, TRUE, FALSE, FALSE, FALSE),
X3=letters[1:5])
t <- list.df.var.types(my.data)
t$factor
t$integer
t$logical
t$numeric
Anda kemudian dapat melakukan sesuatu seperti var(my.data[t$numeric])
.
Semoga ini bisa membantu!
lapply(your_data, class)
dengan sedikit pemrosesan ekstra untuk pemformatan.
Jika Anda mengimpor file csv sebagai data.frame (dan bukan matriks), Anda juga dapat menggunakan summary.default
summary.default(mtcars)
Length Class Mode
mpg 32 -none- numeric
cyl 32 -none- numeric
disp 32 -none- numeric
hp 32 -none- numeric
drat 32 -none- numeric
wt 32 -none- numeric
qsec 32 -none- numeric
vs 32 -none- numeric
am 32 -none- numeric
gear 32 -none- numeric
carb 32 -none- numeric
Pilihan lain adalah menggunakan fungsi peta dari paket purrr.
library(purrr)
map(df,class)
sapply(..., class))
atau interaktif (misalnyastr(...)
) atau keduanya? Ini umumnya lebih terukur untuk melakukannya pemrograman, maka Anda dapat sewenang-wenangFilter(...)
daftar untuk bilangan bulat, karakter, faktor dll Atau Anda dapat menggunakangrep/grepl
untuk mengambil kesimpulan kolom-jenis darinames(...)
jika mereka mengikuti konvensi penamaan setiap