আমি কীভাবে ডেটা ফ্রেমে সমস্ত কলামের ক্লাস পেতে পারি?


85

ডেটা ফ্রেমে প্রতিটি কলামটি কোন বর্গ হয় তা সন্ধান করার একটি সহজ উপায় কী?

উত্তর:


92

একটি বিকল্প ব্যবহার lapplyএবং class। উদাহরণ স্বরূপ:

> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"

$SomeNumeric
[1] "numeric"

আরেকটি বিকল্প হ'ল str:

> str(foo)
'data.frame':   2 obs. of  2 variables:
 $ SomeFactor : Factor w/ 2 levels "a","b": 1 2
 $ SomeNumeric: num  1 2

10
যেহেতু সমস্ত শ্রেণীর classএকটি চরিত্রের ভেক্টরটি কোনও বস্তুর উত্তরাধিকার সূত্রে প্রাপ্ত হয়, তাই আউটপুট একটি তালিকা হতে পারে এবং বেশিরভাগ লোকেরা যেমন প্রত্যাশা করেন তেমনি একটি অক্ষর ভেক্টর নয়। যা কিছুটা বিপজ্জনক হতে পারে ... আমি অনেক বেশি নিরাপদ দেখতে পাই । sapply(foo, class)lapply
ফ্লাডেল

4
আরও ভাল পঠনযোগ্যতার জন্য আমি পরামর্শ দিচ্ছি: unlist(lapply(foo, class))যা অনেকগুলি কলাম সহ ডেটা ফ্রেম সহ কার্যকর।
p130ter

4
unlistসহ lapplyএকটি ভয়ঙ্কর ধারণা কারণ এটি সম্ভব যে length(class(x))>1 (উপরে মন্তব্যগুলি দেখুন) - এর sapplyচেয়ে অনেক বেশি নিরাপদ unlist + lapply। একটি নিরাপদ উপায় হবে sapply(lapply(foo, class), "[", 1)- প্রদত্ত যে foo একটি ডেটা ফ্রেম
lebatsnok

28

আপনি সাধারণ lapplyবা sapplyবিল্টিন ফাংশনগুলি ব্যবহার করতে পারেন ।

lapplyআপনাকে ফিরিয়ে দেবে list-

lapply(dataframe,class)

যদিও sapplyসেরা সম্ভাব্য রিটার্ন প্রকারটি গ্রহণ করবে will ভেক্টর ইত্যাদি -

sapply(dataframe,class)

উভয় কমান্ডই তাদের নিজ নিজ শ্রেণীর সাথে সমস্ত কলামের নাম ফিরিয়ে দেবে।



0

আপনি purrrপাশাপাশি ব্যবহার করতে পারেন যা applyপারিবারিক কার্যাবলির সাথে সমান :

as.data.frame(purrr::map_chr(mtcars, class))
purrr::map_df(mtcars, class)

0

আমি উপরের উত্তরগুলি ব্যবহার করে আরও কমপ্যাক্ট আউটপুট চেয়েছিলাম lapply, তাই এখানে একটি ছোট ফাংশন হিসাবে মোড়ানো বিকল্প।

# Example data
df <-
    data.frame(
        w = seq.int(10),
        x = LETTERS[seq.int(10)],
        y = factor(letters[seq.int(10)]),
        z = seq(
            as.POSIXct('2020-01-01'),
            as.POSIXct('2020-10-01'),
            length.out = 10
        )
    )

# Function returning compact column classes
col_classes <- function(df) {
    t(as.data.frame(lapply(df, function(x) paste(class(x), collapse = ','))))
}

# Return example data's column classes
col_classes(df)
  [,1]            
w "integer"       
x "character"     
y "factor"        
z "POSIXct,POSIXt"

আপনি কি নিশ্চিত যে আপনার ফলাফলটি 1-কলামের ম্যাট্রিক্স হতে চান? কেন? পরিবর্তে একটি চরিত্র ভেক্টর সম্পর্কে?
nbenn

অবশ্যই, কেন 1 কলামের ম্যাট্রিক্স ফেরত আসবে না? আমি বলেছি যে এই সমাধানটি একটি কমপ্যাক্ট আউটপুট জন্য, উদাহরণস্বরূপ কোনও ডেটা.ফ্রেমে ম্যানিপুলেট করার পরে ফিরে আসার জন্য দরকারী useful এটি কলাম ক্লাসের ডাউনস্ট্রিম প্রসেসিংয়ের জন্য ব্যবহার করার উদ্দেশ্যে নয়। উপরের অন্যান্য উত্তরগুলি একটি অক্ষর ভেক্টরকে ফেরত দেয়।
এলেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.