R kullanıyorum ve kullanarak bir veri çerçevesine veri yükledim read.csv()
. Veri çerçevesindeki her bir sütunun veri türünü nasıl belirlerim?
str(...)
ölçeklendirilemez ve 100'den az kömürde buhar biter.
R kullanıyorum ve kullanarak bir veri çerçevesine veri yükledim read.csv()
. Veri çerçevesindeki her bir sütunun veri türünü nasıl belirlerim?
str(...)
ölçeklendirilemez ve 100'den az kömürde buhar biter.
Yanıtlar:
Başlamak için en iyi bahis kullanmaktır ?str()
. Bazı örnekleri incelemek için bazı veriler yapalım:
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])
@Wilmer E Henao H'nin çözümü oldukça akıcı:
sapply(my.data, class)
y x1 x2 X3
"numeric" "integer" "logical" "factor"
str()
Bunu kullanmak size bilgi artı ekstra hediyeler (faktörlerinizin seviyeleri ve her değişkenin ilk birkaç değeri gibi) sağlar:
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
@Gavin Simpson yaklaşımı da basitleştirildi, ancak biraz daha farklı bilgiler sunuyor class()
:
sapply(my.data, typeof)
y x1 x2 X3
"double" "integer" "logical" "integer"
, Ve orta çocuk hakkında daha fazla bilgi için class
, bu mükemmel SO iş parçacığına bakın: R. 'modu' ve 'sınıf' ve 'tipeof' türlerindeki şeylerin kapsamlı bir araştırması yetersizdir . typeof
mode
str(dataframe)
, bir bakışta sütun türlerini belirlemenin en hızlı yolunun olduğunu buldum . Diğer yaklaşımlar daha fazla tuş vuruşu gerektirir ve çok fazla bilgi göstermez, ancak sütun veri türleri diğer işlevlere bir girdi ise yararlıdır.
apply()
? Bu matrisler için. Veri çerçevesi (özel tür) bir listedir.
sapply(yourdataframe, class)
Veri çerçeveniz, kullandığınız veri çerçevesinin adıdır
öneririm
sapply(foo, typeof)
veri çerçevesindeki gerçek vektör türlerine ihtiyacınız varsa. class()
biraz farklı bir canavardır.
Bu bilgiyi bir vektör olarak almanız gerekmiyorsa (yani daha sonra programlı olarak başka bir şey yapmanız gerekmez) kullanın str(foo)
.
Her iki durumda foo
da veri çerçevenizin adı ile değiştirilir.
Veri çerçevenizi aşağıdaki işleve geçirmeniz yeterlidir:
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")
}
veri çerçevenizdeki tüm veri türlerinin bir grafiğini oluşturmak için. İçin iris verisetine Weka'daki biz izleyici kitlesi elde:
data_types(iris)
Küçük veri çerçeveleri için:
library(tidyverse)
as_tibble(mtcars)
veri türleriyle df'den çıktı almanızı sağlar
# 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
Büyük veri çerçeveleri için:
glimpse(mtcars)
veri türlerinin yapılandırılmış bir görünümünü sunar:
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, ...
Sütunların veri türlerinin bir listesini almak için (yukarıdaki @Alexandre tarafından söylendiği gibi):
map(mtcars, class)
veri türlerinin bir listesini verir:
$mpg
[1] "numeric"
$cyl
[1] "numeric"
$disp
[1] "numeric"
$hp
[1] "numeric"
Bir sütunun veri türünü değiştirmek için:
library(hablar)
mtcars %>%
convert(chr(mpg, am),
int(carb))
sütunları mpg
ve am
karakteri ve sütunu carb
tamsayıya dönüştürür:
# 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
Açıkça belirtilmediğinden, sadece şunu ekliyorum:
Tüm veri türlerinin oluşum sayısını tutan bir tablo oluşturmak için bir yol arıyordum .
Diyelim ki data.frame
iki sayısal ve bir mantıksal sütun var
dta <- data.frame(a = c(1,2,3),
b = c(4,5,6),
c = c(TRUE, FALSE, TRUE))
Her veri türünün sütun sayısını bununla özetleyebilirsiniz.
table(unlist(lapply(dta, class)))
# logical numeric
# 1 2
Çok fazla sütununuz varsa ve hızlı bir genel bakış almak istiyorsanız, bu son derece kullanışlıdır.
Kredi vermek için: Bu çözüm, @Cybernetic'in cevabından ilham aldı .
Burada helpRFunctions paketinin bir parçası olan ve veri çerçevenizdeki çeşitli veri türlerinin bir listesini ve bu türle ilişkili belirli değişken adlarını döndüren bir işlev vardır .
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
Sonra böyle bir şey yapabilirsiniz var(my.data[t$numeric])
.
Umarım bu yardımcı olur!
lapply(your_data, class)
biçimlendirme için biraz ekstra işleme ile dikkat çekiyor .
Csv dosyasını data.frame olarak içe aktarırsanız (matris değil), 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
Başka bir seçenek de purrr paketinin harita fonksiyonunu kullanmaktır.
library(purrr)
map(df,class)
sapply(..., class))
veya etkileşimli (örnstr(...)
) ya da her ikisi mi? O keyfi, programlı bunu yapmak için genellikle daha ölçeklenebilir sonra YapabileceğinFilter(...)
tamsayılar, karakterler, faktörler için liste vb Yoksa kullanabilirsinizgrep/grepl
gelen anlaması sütun türlerinenames(...)
herhangi adlandırma kurallarını takip ederseniz