मैं R का उपयोग कर रहा हूं और डेटा का उपयोग करके डेटाफ्रेम में लोड कर रहा हूं read.csv()
। मैं डेटा फ़्रेम में प्रत्येक कॉलम का डेटा प्रकार कैसे निर्धारित करूं?
str(...)
स्केलेबल नहीं हैं और <100 कॉल पर भाप से बाहर निकलते हैं।
मैं R का उपयोग कर रहा हूं और डेटा का उपयोग करके डेटाफ्रेम में लोड कर रहा हूं read.csv()
। मैं डेटा फ़्रेम में प्रत्येक कॉलम का डेटा प्रकार कैसे निर्धारित करूं?
str(...)
स्केलेबल नहीं हैं और <100 कॉल पर भाप से बाहर निकलते हैं।
जवाबों:
उपयोग करने के लिए आपका सबसे अच्छा दांव है ?str()
। कुछ उदाहरणों का पता लगाने के लिए, आइए कुछ डेटा बनाते हैं:
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 ई हेनो एच का समाधान बहुत सुव्यवस्थित है:
sapply(my.data, class)
y x1 x2 X3
"numeric" "integer" "logical" "factor"
उपयोग करने str()
से आपको वह जानकारी मिलती है, जैसे अतिरिक्त माल (जैसे आपके कारकों के स्तर और प्रत्येक चर के पहले कुछ मान):
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
@ गेविन सिम्पसन का दृष्टिकोण भी सुव्यवस्थित है, लेकिन इससे कुछ अलग जानकारी प्रदान करता है class()
:
sapply(my.data, typeof)
y x1 x2 X3
"double" "integer" "logical" "integer"
के बारे में अधिक जानकारी के लिए class
, typeof
और मध्य बच्चे, mode
, इस उत्कृष्ट अतः धागा देखें: आर 'मोड' और 'वर्ग' और 'typeof' में चीजों के प्रकार की एक व्यापक सर्वेक्षण अपर्याप्त हैं ।
str(dataframe)
एक नज़र में कॉलम प्रकार निर्धारित करने का सबसे तेज़ तरीका है। अन्य दृष्टिकोणों को अधिक कीस्ट्रोक्स की आवश्यकता होती है और अधिक जानकारी नहीं दिखाते हैं, लेकिन यदि स्तंभ डेटा प्रकार अन्य फ़ंक्शन के लिए एक इनपुट हैं तो वे सहायक होते हैं।
apply()
? वह मैट्रिस के लिए है। डेटा फ्रेम एक विशेष प्रकार की सूची है।
sapply(yourdataframe, class)
जहाँ yourdataframe आपके द्वारा उपयोग किए जा रहे डेटा फ़्रेम का नाम है
मै सुझाव दूंगा
sapply(foo, typeof)
यदि आपको डेटा फ्रेम में वास्तविक प्रकार के वैक्टर की आवश्यकता है। class()
कुछ अलग जानवर है।
यदि आपको इस जानकारी को वेक्टर के रूप में प्राप्त करने की आवश्यकता नहीं है (अर्थात आपको बाद में प्रोग्राम के लिए कुछ और करने की आवश्यकता नहीं है), बस उपयोग करें str(foo)
।
दोनों मामलों foo
में आपके डेटा फ्रेम के नाम के साथ प्रतिस्थापित किया जाएगा।
बस निम्नलिखित फ़ंक्शन में अपना डेटा फ़्रेम पास करें:
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")
}
अपने डेटा फ्रेम में सभी डेटा प्रकारों के एक भूखंड का उत्पादन करने के लिए। के लिए आईरिस डाटासेट हम निम्नलिखित मिलती है:
data_types(iris)
छोटे डेटा फ्रेम के लिए:
library(tidyverse)
as_tibble(mtcars)
आपको डेटा प्रकारों के साथ df का प्रिंट आउट देता है
# 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
बड़े डेटा फ्रेम के लिए:
glimpse(mtcars)
आपको डेटा प्रकारों का एक संरचित दृश्य देता है:
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, ...
स्तंभों के डेटा प्रकार की सूची प्राप्त करने के लिए (जैसा कि ऊपर @Alexandre द्वारा कहा गया है):
map(mtcars, class)
डेटा प्रकारों की एक सूची देता है:
$mpg
[1] "numeric"
$cyl
[1] "numeric"
$disp
[1] "numeric"
$hp
[1] "numeric"
स्तंभ का डेटा प्रकार बदलने के लिए:
library(hablar)
mtcars %>%
convert(chr(mpg, am),
int(carb))
स्तंभों mpg
और am
वर्णों और स्तंभों carb
को पूर्णांक में रूपांतरित करता है :
# 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
चूंकि यह स्पष्ट रूप से नहीं कहा गया था, मैं इसे जोड़ता हूं:
मैं एक तालिका बनाने का एक तरीका ढूंढ रहा था जो सभी डेटा प्रकारों की घटनाओं की संख्या रखती हो ।
मान लें कि हमारे पास data.frame
दो संख्यात्मक और एक तार्किक कॉलम है
dta <- data.frame(a = c(1,2,3),
b = c(4,5,6),
c = c(TRUE, FALSE, TRUE))
आप उस के साथ प्रत्येक डेटा प्रकार के स्तंभों की संख्या को संक्षेप में बता सकते हैं
table(unlist(lapply(dta, class)))
# logical numeric
# 1 2
यह बेहद आसान है, यदि आपके पास बहुत सारे कॉलम हैं और एक त्वरित अवलोकन प्राप्त करना चाहते हैं।
श्रेय देने के लिए: यह समाधान @Cybernetic के उत्तर से प्रेरित था ।
यहां एक फ़ंक्शन है जो हेल्परीफंक्शंस पैकेज का हिस्सा है जो आपके डेटा फ्रेम में विभिन्न डेटा प्रकारों की सूची, साथ ही साथ उस प्रकार से जुड़े विशिष्ट चर नामों की सूची लौटाएगा।
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
आप तब कुछ ऐसा कर सकते थे var(my.data[t$numeric])
।
आशा है कि यह उपयोगी है!
lapply(your_data, class)
स्वरूपण के लिए अतिरिक्त प्रसंस्करण के एक बिट के साथ है।
यदि आप csv फ़ाइल को data.frame (और मैट्रिक्स नहीं) के रूप में आयात करते हैं, तो आप उपयोग भी कर सकते हैं 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
एक अन्य विकल्प purrr पैकेज के मानचित्र फ़ंक्शन का उपयोग कर रहा है।
library(purrr)
map(df,class)
sapply(..., class))
या अंतःक्रियात्मक (जैसेstr(...)
) या दोनों? यह आमतौर पर प्रोग्रामेटिक रूप से करने के लिए अधिक स्केलेबल होता है, फिर आप मनमाने ढंगFilter(...)
से पूर्णांकों, वर्णों, कारकों आदि के लिए सूची बना सकते हैं या यदि आप किसी भी नामकरण सम्मेलनों का अनुसरण करते हैं तोgrep/grepl
कॉलम-प्रकारों का उपयोग कर सकते हैं।names(...)