ডেটা ফ্রেমের কলামগুলির ডেটা প্রকারগুলি নির্ধারণ করুন


153

আমি আর ব্যবহার করছি এবং ব্যবহার করে ডেটা ফ্রেমে ডেটা লোড করেছি read.csv()। আমি কীভাবে ডেটা ফ্রেমে প্রতিটি কলামের ডেটা টাইপ নির্ধারণ করব?


প্রোগ্রামগতভাবে (যেমন sapply(..., class))বা ইন্টারেক্টিভভাবে (উদাহরণস্বরূপ str(...)) বা উভয়? প্রোগ্রামাগুলিভাবে এটি করার জন্য এটি আরও বেশি স্কেলেবল হয়, তবে আপনি নির্বিচারে Filter(...)পূর্ণসংখ্যা, অক্ষর, গুণক ইত্যাদির জন্য তালিকা তৈরি করতে পারেন বা কোনও নামকরণ কনভেনশন অনুসরণ করলে grep/greplআপনি কলামের প্রকারগুলি নির্ধারণ করতে ব্যবহার করতে পারেনnames(...)
smci

@ এসএমসি: আমি আমার আসল প্রশ্নে 'প্রোগ্রাম্যাটিকভাবে' চাইনি। আপনি কেন আমার প্রশ্নের পুরো প্রকৃতিটি পরিবর্তন করবেন তা আমি জানি না।
stackoverflowuser2010

ঠিক আছে, এটি আবার ঘূর্ণিত হয়েছে। এটি পুরো প্রকৃতি পরিবর্তন করেনি, এটি দুটি দিকের একটিতে এটি স্পষ্ট করে। ইন্টারেক্টিভ পদ্ধতিগুলি ব্যবহার করে str(...)স্কেলযোগ্য নয় এবং <100 কোলে বাষ্পের বাইরে চলে যায়।
smci

উত্তর:


215

আপনার সেরা বাজি শুরু করা ব্যবহার করা ?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])

@ উইলমার ই হেনাও এইচ এর সমাধানটি খুব সুবিন্যস্ত:

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' জিনিস ধরনের এক বিস্তারিত জরিপে অপর্যাপ্ত হয়


1
বেশ কয়েক মাস ধরে আর ব্যবহার করার পরে, আমি খুঁজে পেয়েছি যে str(dataframe)এটি এক নজরে কলামের প্রকারগুলি নির্ধারণ করার দ্রুততম উপায়। অন্যান্য পদ্ধতির জন্য আরও কী-স্ট্রোক প্রয়োজন এবং তত তথ্য প্রদর্শিত হবে না, তবে কলামের ডেটা ধরণের অন্যান্য ফাংশনের ইনপুট হলে সেগুলি সহায়ক।
stackoverflowuser2010

হাই যখন আমি প্রয়োগের পরিবর্তে প্রয়োগের সাথে একই করতাম, এটি কার্যকর হয় না
ডম জো

@ ডোমজো, আপনি কেন ব্যবহার করবেন apply()? এটা ম্যাট্রিক্সের জন্য। একটি ডেটা ফ্রেম হল একটি (বিশেষ ধরণের) তালিকা list
গুং -


18

আমি সুপারিশ করবে

sapply(foo, typeof)

আপনার যদি ডেটা ফ্রেমে প্রকৃত ধরণের ভেক্টরগুলির প্রয়োজন হয়। class()কিছুটা আলাদা জন্তু।

আপনার যদি ভেক্টর হিসাবে এই তথ্য পাওয়ার প্রয়োজন না হয় (যেমন আপনাকে পরবর্তীতে প্রোগ্রামের পরে অন্য কিছু করার দরকার নেই), কেবল ব্যবহার করুন str(foo)

উভয় ক্ষেত্রেই fooআপনার ডেটা ফ্রেমের নামের সাথে প্রতিস্থাপন করা হবে।


7

কেবলমাত্র নিম্নলিখিত ডেটাতে আপনার ডেটা ফ্রেমটি পাস করুন:

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")
}

আপনার ডেটা ফ্রেমে সমস্ত ডেটা ধরণের প্লট তৈরি করতে। জন্য Iris ডেটা সেটটি আমরা নিম্নলিখিত পাবেন:

data_types(iris)

এখানে চিত্র বর্ণনা লিখুন


5

ছোট ডেটা ফ্রেমের জন্য:

library(tidyverse)

as_tibble(mtcars)

আপনাকে ডেটা প্রকারের সাথে প্রিন্ট আউট দেয়

# 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, ...

কলামগুলির ডেটা টাইপের একটি তালিকা পেতে (উপরে @ আলেকজান্দ্রে বলেছেন)

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

3

যেহেতু এটি পরিষ্কারভাবে বলা হয়নি, আমি কেবল এটি যুক্ত করি:

আমি একটি টেবিল তৈরির জন্য একটি উপায় খুঁজছিলাম যা সমস্ত ডেটা ধরণের সংখ্যার হোল্ড করে ।

বলুন আমাদের 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 

এটি আপনার পক্ষে প্রচুর কলাম রয়েছে এবং একটি দ্রুত ওভারভিউ পেতে চাইলে এটি অত্যন্ত কার্যকর।

ক্রেডিট দেওয়ার জন্য: এই সমাধানটি @ সাইবারনেটিকের উত্তরে অনুপ্রাণিত হয়েছিল ।


2

এখানে এমন একটি ফাংশন রয়েছে যা হেল্পআরফানিউশনস প্যাকেজের অংশ যা আপনার ডেটা ফ্রেমে বিভিন্ন ডেটা ধরণের সমস্তের পাশাপাশি সেই ধরণের সাথে সম্পর্কিত নির্দিষ্ট ভেরিয়েবলের নামের তালিকা ফিরিয়ে দেবে।

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])

আশা করি এটি সহায়ক!


1
উল্লেখযোগ্য যে হুডের নীচে এটি lapply(your_data, class)ফর্ম্যাটের জন্য কিছুটা অতিরিক্ত প্রসেসিংয়ের সাথে রয়েছে।
গ্রেগর থমাস

1

আপনি যদি CSV ফাইলটিকে ডেটা.ফ্রেম (এবং ম্যাট্রিক্স নয়) হিসাবে আমদানি করেন তবে আপনি এটিও ব্যবহার করতে পারেন 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.