ডেটা ফ্রেমে প্রতিটি কলামটি কোন বর্গ হয় তা সন্ধান করার একটি সহজ উপায় কী?
ডেটা ফ্রেমে প্রতিটি কলামটি কোন বর্গ হয় তা সন্ধান করার একটি সহজ উপায় কী?
উত্তর:
একটি বিকল্প ব্যবহার 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
unlist(lapply(foo, class))যা অনেকগুলি কলাম সহ ডেটা ফ্রেম সহ কার্যকর।
unlistসহ lapplyএকটি ভয়ঙ্কর ধারণা কারণ এটি সম্ভব যে length(class(x))>1 (উপরে মন্তব্যগুলি দেখুন) - এর sapplyচেয়ে অনেক বেশি নিরাপদ unlist + lapply। একটি নিরাপদ উপায় হবে sapply(lapply(foo, class), "[", 1)- প্রদত্ত যে foo একটি ডেটা ফ্রেম
আপনি সাধারণ lapplyবা sapplyবিল্টিন ফাংশনগুলি ব্যবহার করতে পারেন ।
lapplyআপনাকে ফিরিয়ে দেবে list-
lapply(dataframe,class)
যদিও sapplyসেরা সম্ভাব্য রিটার্ন প্রকারটি গ্রহণ করবে will ভেক্টর ইত্যাদি -
sapply(dataframe,class)
উভয় কমান্ডই তাদের নিজ নিজ শ্রেণীর সাথে সমস্ত কলামের নাম ফিরিয়ে দেবে।
হ্যালো একই সন্ধান করছিল, এবং এটিও হতে পারে
unlist(lapply(mtcars,class))
আপনি purrrপাশাপাশি ব্যবহার করতে পারেন যা applyপারিবারিক কার্যাবলির সাথে সমান :
as.data.frame(purrr::map_chr(mtcars, class))
purrr::map_df(mtcars, class)
আমি উপরের উত্তরগুলি ব্যবহার করে আরও কমপ্যাক্ট আউটপুট চেয়েছিলাম 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"
classএকটি চরিত্রের ভেক্টরটি কোনও বস্তুর উত্তরাধিকার সূত্রে প্রাপ্ত হয়, তাই আউটপুট একটি তালিকা হতে পারে এবং বেশিরভাগ লোকেরা যেমন প্রত্যাশা করেন তেমনি একটি অক্ষর ভেক্টর নয়। যা কিছুটা বিপজ্জনক হতে পারে ... আমি অনেক বেশি নিরাপদ দেখতে পাই ।sapply(foo, class)lapply