সংক্ষিপ্ত সংস্করণ: ব্যবহার formatC
বা sprintf
।
দীর্ঘ সংস্করণ:
নেতৃস্থানীয় জিরো যুক্ত করে সংখ্যার ফর্ম্যাট করার জন্য বেশ কয়েকটি ফাংশন রয়েছে। কোনটি সেরা তা নির্ভর করে আপনি কী করতে চান অন্য ফর্ম্যাটিংয়ের উপর।
প্রশ্ন থেকে উদাহরণটি বেশ সহজ, যেহেতু সমস্ত মানগুলির সাথে শুরুতে একই সংখ্যার সংখ্যা রয়েছে, তাই আসুন 10 প্রস্থ 8 এর শক্তি তৈরির জন্য আরও কঠোর উদাহরণ চেষ্টা করুন।
anim <- 25499:25504
x <- 10 ^ (0:5)
paste
(এবং এটির বৈকল্পিক paste0
) হ'ল প্রায়শই প্রথম স্ট্রিং ম্যানিপুলেশন ফাংশন যা আপনি জুড়ে আসেন। এগুলি প্রকৃতপক্ষে সংখ্যার কারসাজির জন্য ডিজাইন করা হয়নি তবে এগুলির জন্য সেগুলি ব্যবহার করা যেতে পারে। সরল ক্ষেত্রে যেখানে আমাদের সর্বদা একটি একক শূন্য প্রিপেন্ড করতে paste0
হয় তা হ'ল সেরা সমাধান।
paste0("0", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
সংখ্যায় অঙ্কের পরিবর্তনশীল সংখ্যার ক্ষেত্রে, আপনাকে কয়টি শূন্যকে পূর্বে বর্জন করতে হবে তা ম্যানুয়ালি গণনা করতে হবে, এটি যথেষ্ট ভয়াবহ যে আপনাকে কেবল রোগাক্রান্ত কৌতূহলের বাইরে করা উচিত।
str_pad
থেকে stringr
অনুরূপভাবে কাজ করে paste
এটি আরও স্পষ্ট করে তোলে যে আপনি জিনিসগুলিকে প্যাড করতে চান।
library(stringr)
str_pad(anim, 6, pad = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
আবার এটি সংখ্যার সাথে ব্যবহারের জন্য সত্যই ডিজাইন করা হয়নি, তাই কঠিন ক্ষেত্রে কিছুটা চিন্তা করা দরকার। আমাদের কেবল "প্রস্থের 8 নম্বরের শূন্য সহ প্যাড" বলতে সক্ষম হওয়া উচিত, তবে এই আউটপুটটি দেখুন:
str_pad(x, 8, pad = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "0001e+05"
আপনাকে বৈজ্ঞানিক জরিমানার বিকল্পটি সেট করতে হবে যাতে স্থির নোটেশন (বৈজ্ঞানিক স্বরলিপি না দিয়ে) ব্যবহার করে সংখ্যাগুলি সর্বদা ফরম্যাট হয়।
library(withr)
with_options(
c(scipen = 999),
str_pad(x, 8, pad = "0")
)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
stri_pad
মধ্যে stringi
ঠিক মত কাজ str_pad
থেকে stringr
।
formatC
সি ফাংশন একটি ইন্টারফেস printf
। এটি ব্যবহারের জন্য অন্তর্নিহিত ফাংশনের আরকানা সম্পর্কে কিছু জ্ঞানের প্রয়োজন (লিঙ্কটি দেখুন)। এই ক্ষেত্রে, গুরুত্বপূর্ণ বিষয়গুলি হ'ল width
যুক্তি, "পূর্ণসংখ্যার" জন্য এবং একটি জিরো প্রিপেন্ডিংয়ের জন্য।format
"d"
"0"
flag
formatC(anim, width = 6, format = "d", flag = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
formatC(x, width = 8, format = "d", flag = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
এটি আমার প্রিয় সমাধান, যেহেতু প্রস্থ পরিবর্তন করার সাথে টিঙ্কার করা সহজ, এবং ফাংশনটি অন্যান্য ফর্ম্যাটিং পরিবর্তনগুলি করার জন্য যথেষ্ট শক্তিশালী।
sprintf
একই নামের সি ফাংশনের ইন্টারফেস; মত formatC
কিন্তু একটি ভিন্ন বাক্য গঠন সঙ্গে।
sprintf("%06d", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
sprintf("%08d", x)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
এর প্রধান সুবিধাটি sprintf
হ'ল আপনি দীর্ঘতর টেক্সটের বিটগুলির মধ্যে ফর্ম্যাট সংখ্যাগুলি এম্বেড করতে পারেন।
sprintf(
"Animal ID %06d was a %s.",
anim,
sample(c("lion", "tiger"), length(anim), replace = TRUE)
)
## [1] "Animal ID 025499 was a tiger." "Animal ID 025500 was a tiger."
## [3] "Animal ID 025501 was a lion." "Animal ID 025502 was a tiger."
## [5] "Animal ID 025503 was a tiger." "Animal ID 025504 was a lion."
আরও দেখুন goodside এর উত্তর ।
সম্পূর্ণতার জন্য এটি অন্যান্য ফর্ম্যাটিং ফাংশনগুলি উল্লেখ করা উচিত যা মাঝে মধ্যে দরকারী, তবে শূন্যগুলি প্রিপেন্ডিংয়ের কোনও পদ্ধতি নেই।
format
, সংখ্যার পদ্ধতি সহ যেকোন ধরণের অবজেক্টকে ফর্ম্যাট করার জন্য একটি জেনেরিক ফাংশন। এটি সামান্য বিট কাজ formatC
করে তবে অন্য ইন্টারফেসের সাথে।
prettyNum
বেশিরভাগ ম্যানুয়াল অক্ষ টিক লেবেল তৈরি করার জন্য এটি এখনও অন্য ফর্ম্যাটিং ফাংশন। এটি সংখ্যা বিস্তৃত জন্য বিশেষত ভাল কাজ করে।
scales
প্যাকেজ যেমন বিভিন্ন ফাংশন আছে percent
, date_format
এবং dollar
বিশেষজ্ঞ বিন্যাস ধরনের জন্য।
data$anim = paste(rep(0, n), data$anim, sep = "")