চিড়িয়াখানা :: Yearmon অবজেক্ট থেকে মাস এবং বছর বের করুন


112

আমার একটি yearmonবিষয় রয়েছে:

require(zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"

আমি কীভাবে এ থেকে মাস এবং বছর বের করতে পারি?

month1 <- fn(date1)
year1 <- fn(date1)

আমি কি ফাংশন এর জায়গায় ব্যবহার করা উচিত fn()

উত্তর:


143

format()শ্রেণীর বস্তুর জন্য পদ্ধতিটি ব্যবহার করুন "yearmon"। এখানে আপনার উদাহরণের তারিখ (সঠিকভাবে তৈরি!)

date1 <- as.yearmon("Mar 2012", "%b %Y")

তারপরে আমরা প্রয়োজন অনুসারে তারিখের অংশগুলি বের করতে পারি:

> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"

এগুলি চরিত্র হিসাবে ফিরে আসে। যথাযথ যেখানে, as.numeric()আপনি বছর বা সংখ্যাসূচক সংখ্যাটি একটি সংখ্যাসৈক চলক হিসাবে চাইলে মোড়কে রাখুন, যেমন

> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012

বিশদটি দেখুন ?yearmonএবং দেখুন ?strftime- দ্বিতীয়টি আপনি ব্যবহার করতে পারেন এমন স্থানধারক চরিত্রগুলি ব্যাখ্যা করে।


4
% বি পুরো মাসের জন্য, অর্থাত্ "মার্চ" এর পরিবর্তে মার্চ
প্যাট্রিক্ট

আমি কীভাবে করব যে যদি কোনও vectorএন উপাদান থাকে তবে একটিতে 1k তারিখ বলতে পারি vector?
স্টফফেস

@ ক্রিসল অনেকটা আর এর মতো, date1খেজুরের ভেক্টরও হতে পারে।
গ্যাভিন সিম্পসন

101

লুব্রিড প্যাকেজটি এই জাতীয় জিনিসটির জন্য আশ্চর্যজনক:

> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012

2
হা এই উত্তর জন্য আপনাকে ধন্যবাদ। এটি বিশেষত অন্যান্য সমাধানগুলিকে হিট করে যখন আপনি কিছু করতে চাইলে (বছর (তারিখ 1)> 2014) {বছর (তারিখ 1) <- বছর (তারিখ 1) - 100}
ভিনসেন্ট

1
4000 চুক্তির শুরুর তারিখগুলির মধ্যে বছরটি গ্রহণের প্রয়োজনীয়তার জন্য এটি অবশ্যই সেরা উত্তর ছিল।
d8aninja

@ অ্যারি বি ফ্রেডম্যান আমি বর্তমানে আর ৩.১.০ ব্যবহার করছি যখন এটি lubridateপ্যাকেজটি ব্যবহার করে না এবং এটি ব্যবহার করা বছর (তারিখ) চেষ্টা করে তবে বছরের পরিবর্তে দিনটি দেয় কেবল এটিই তারিখগুলিতে কাজ করে যার ফর্ম্যাট "2015-05 -06 "?
কেআরইউ 6:38

1
@ কেআরইউ আর-র নতুন সংস্করণগুলি মাঝে মাঝে সমস্ত প্যাকেজ আপডেট করতে সংগ্রহস্থলগুলিতে কয়েক সপ্তাহ সময় নেয়। এটি যতক্ষণ না এটি সত্য তারিখের ফর্ম্যাট, কোনও চরিত্রের ভেক্টর না হয়ে সমস্ত তারিখের ফর্ম্যাটগুলিতে কাজ করা উচিত। যদি এখনও আপনার সমস্যার সমাধান না করে এবং আপনি আপনার প্রশ্নের যে কোনও উপাদানটির জন্য এসও অনুসন্ধান করতে না পারেন তবে দয়া করে একটি নতুন কিউ পোস্ট করুন।
এরি বি ফ্রেডম্যান

15

আমি জানি যে ওপি এখানে ব্যবহার করছে zoo, তবে আমি এই থ্রেডটি tsএকই সমস্যার জন্য একটি স্ট্যান্ডার্ড সমাধানের জন্য গুগল করে দেখলাম । সুতরাং আমি ভেবেছিলাম আমিও একটি zooবিনামূল্যে উত্তর যুক্ত করব ts

# create an example Date 
date_1 <- as.Date("1990-01-01")
# extract year
as.numeric(format(date_1, "%Y"))
# extract month
as.numeric(format(date_1, "%m"))

12

আপনি ব্যবহার করতে পারেন format:

library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"

আমি কীভাবে মাসটি একটি নম্বর হতে পারি? (উদাহরণস্বরূপ 3 মার্চের জন্য?)
অ্যাডাম 8888

@ user1169210 আমি আমার উত্তরে এটি কভার করেছি। আপনি as.numeric(format(x, "%m"))উদাহরণস্বরূপ একটি সংখ্যা হিসাবে মাসের জন্য চান ।
গ্যাভিন সিম্পসন

5

বড় ভেক্টরগুলির জন্য:

y = as.POSIXlt(date1)$year + 1900    # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1        # x$mon : 0–11

1
এটি সর্বোত্তম উত্তর, যেহেতু আর ইতিমধ্যে POSIXltচিড়িয়াখানা প্যাকেজটিকে অপ্রয়োজনীয় করে তোলে এমন
সহজলভ্য

0

প্রশ্নটি কী আউটপুট প্রত্যাশিত তা সুনির্দিষ্টভাবে জানায়নি তবে ধরে নেওয়া যে মাসের জন্য আপনি মাসের সংখ্যাটি চান (জানুয়ারী = 1) এবং যে বছরের জন্য আপনি সংখ্যার 4 ডিজিটের বছর চান তা ধরে ধরেই আমরা এই প্রশ্নটিতে কোডটি চালিয়েছি:

cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012

0

1800 থেকে এখন অবধি ডেটা নিয়ে একই সমস্যা ছিল, এটি আমার পক্ষে কাজ করেছে:

data2$date=as.character(data2$date) 
lct <- Sys.getlocale("LC_TIME"); 
Sys.setlocale("LC_TIME","C")
data2$date<- as.Date(data2$date, format = "%Y %m %d") # and it works
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.