মনে করুন, আপনার কাছে একটি ডেটা ফ্রেম রয়েছে:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
আপনি কীভাবে কেবলমাত্র সেই কলামগুলিকেই বেছে নেবেন যেগুলি সংখ্যাযুক্ত?
মনে করুন, আপনার কাছে একটি ডেটা ফ্রেম রয়েছে:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
আপনি কীভাবে কেবলমাত্র সেই কলামগুলিকেই বেছে নেবেন যেগুলি সংখ্যাযুক্ত?
উত্তর:
সম্পাদনা: অসদাচরণের ব্যবহার এড়াতে আপডেট করা হয়েছে sapply
।
যেহেতু একটি ডেটা ফ্রেম একটি তালিকা তাই আমরা তালিকা-প্রয়োগকারী ফাংশনগুলি ব্যবহার করতে পারি:
nums <- unlist(lapply(x, is.numeric))
তারপরে স্ট্যান্ডার্ড সাবসেটিং
x[ , nums]
## don't use sapply, even though it's less code
## nums <- sapply(x, is.numeric)
আরও একটি মুশকিল আধুনিক আর এর জন্য আমি এখন সুপারিশ করব
x[ , purrr::map_lgl(x, is.numeric)]
কম কোডি, আর এর নির্দিষ্ট কিরকগুলিকে কম প্রতিফলিত করে এবং আরও সোজা, এবং ডেটাবেস-ব্যাক-এন্ড টিবিলগুলিতে ব্যবহার করার জন্য শক্তিশালী:
dplyr::select_if(x, is.numeric)
undefined columns selected
। কীভাবে এড়ানো যায়?
tryCatch()
মোকাবেলায় একটি ব্যবহার করতে পারেন । একটি নতুন প্রশ্ন খোলার বিবেচনা করুন।
Filter()
বেস প্যাকেজ থেকে ব্যবহারের ক্ষেত্রে উপযুক্ত ফাংশন: আপনার কেবল কোড করতে হবে:
Filter(is.numeric, x)
এটি এর চেয়েও দ্রুত select_if()
:
library(microbenchmark)
microbenchmark(
dplyr::select_if(mtcars, is.numeric),
Filter(is.numeric, mtcars)
)
(আমার কম্পিউটারে) এর জন্য 60 মাইক্রোসেকেন্ডের মাঝারি Filter
এবং 21,000 মাইক্রোসেকেন্ডের select_if
(350x দ্রুত) ফেরত দেয়।
Filter()
এখানে কাজ করে না তা প্রতিস্থাপন করা হয়, যেমন Filter(is.numeric,iris) <- 0.5*Filter(is.numeric,iris)
কাজ করবে না।
যদি আপনি কেবল কলামের নামগুলিতে আগ্রহী হন তবে এটি ব্যবহার করুন:
names(dplyr::select_if(train,is.numeric))
অন্যান্য উত্তরের জন্য এটি একটি বিকল্প কোড:
x[, sapply(x, class) == "numeric"]
সঙ্গে একটি data.table
x[, lapply(x, is.numeric) == TRUE, with = FALSE]
গ্রন্থাগার পিসিআমিক্সডাটাতে ফান্টন স্প্লিটমিক্স রয়েছে যা প্রদত্ত ডেটাফ্রেম "আপনার ডেটাফ্রেম" এর গুণগত (সংখ্যাসূচক তথ্য) এবং গুণগত (শ্রেণিবদ্ধ তথ্য) বিভক্ত:
install.packages("PCAmixdata")
library(PCAmixdata)
split <- splitmix(YourDataframe)
X1 <- split$X.quanti(Gives numerical columns in the dataset)
X2 <- split$X.quali (Gives categorical columns in the dataset)
অন্য উপায় নিম্নলিখিত হিসাবে হতে পারে:
#extracting numeric columns from iris datset
(iris[sapply(iris, is.numeric)])
আপনার যদি অনেকগুলি ফ্যাক্টর ভেরিয়েবল থাকে তবে আপনি ব্যবহার করতে পারেন select_if
মজাদার । dplyr প্যাকেজ ইনস্টল করুন। অনেকগুলি ফাংশন রয়েছে যা শর্তকে সন্তুষ্ট করে ডেটা পৃথক করে। আপনি শর্ত সেট করতে পারেন।
এই মত ব্যবহার করুন।
categorical<-select_if(df,is.factor)
str(categorical)
এটি সরাসরি প্রশ্নের উত্তর দেয় না তবে এটি খুব কার্যকর হতে পারে, বিশেষত যদি আপনি আপনার আইডি কলাম এবং নির্ভরশীল পরিবর্তনশীল ব্যতীত সমস্ত সংখ্যক কলামের মতো কিছু চান।
numeric_cols <- sapply(dataframe, is.numeric) %>% which %>%
names %>% setdiff(., c("id_variable", "dep_var"))
dataframe %<>% dplyr::mutate_at(numeric_cols, function(x) your_function(x))
x[nums]
বাx[sapply(x,is.numeric)]
পাশাপাশি কাজ করে। এবং তারা সবসময় ফিরে আসেdata.frame
।x[1]
বনাম তুলনা করুনx[,1]
- প্রথমটি হ'লdata.frame
, দ্বিতীয়টি ভেক্টর। যদি কেউ রূপান্তর প্রতিরোধ করতে চায় তবে অবশ্যই ব্যবহার করতে হবেx[, 1, drop=FALSE]
।