এক সপ্তাহের দিনটি সন্ধান করুন


215

ধরা যাক যে আমার আর এ একটি তারিখ রয়েছে এবং এটি নিম্নরূপে এটি ফর্ম্যাট করা আছে।

   date      
2012-02-01 
2012-02-01
2012-02-02

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

df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02")) 

সুতরাং দিনগুলি যুক্ত করার পরে, এটি দেখতে দেখতে শেষ হবে:

   date       day
2012-02-01   Wednesday
2012-02-01   Wednesday
2012-02-02   Thursday

এটা কি সম্ভব? কেউ কি আমাকে এমন প্যাকেজের দিকে নির্দেশ করতে পারেন যা আমাকে এই কাজটি করার অনুমতি দেবে? কেবল তারিখ অনুসারে দিনটি স্বয়ংক্রিয়ভাবে উত্পন্ন করার চেষ্টা করা হচ্ছে।

উত্তর:


297
df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02")) 
df$day <- weekdays(as.Date(df$date))
df
##         date       day
## 1 2012-02-01 Wednesday
## 2 2012-02-01 Wednesday
## 3 2012-02-02  Thursday

সম্পাদনা করুন: কেবল অন্য উপায় দেখানোর জন্য ...

wdayএকটি কম্পোনেন্ট POSIXltঅবজেক্ট সাংখ্যিক কর্মদিবসে (0-6 রোববার শুরুর) হয়।

as.POSIXlt(df$date)$wday
## [1] 3 3 4

যা আপনি সপ্তাহের দিনের নামের একটি চরিত্র ভেক্টরকে সাবসেট করতে ব্যবহার করতে পারেন

c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", 
    "Friday", "Saturday")[as.POSIXlt(df$date)$wday + 1]
## [1] "Wednesday" "Wednesday" "Thursday" 

3
+1 আপনি weekdaysযেমন ব্যবহার করছেন তেমন সপ্তাহের দিনের সংখ্যা পাওয়ার কি কোনও উপায় আছে as.POSIXlt??
শম্ভো

3
@Shambho আমি আপনি এই কাজ করতে পারে: setNames(0:6, c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))[weekdays(as.Date(df$date))]। আপনি যদি নামগুলি পছন্দ না করেন তবে আপনি unname()এটি চারপাশে মোড়ানো করতে পারেন।
জিএসআই

6
আপনি যে তারিখটি করতে পারেন তার থেকে সপ্তাহের দিন নম্বর (০--6, সান-শ্যাট) পেতে: ফর্ম্যাট (as.Date (df $ তারিখ), "% w")। ফর্ম্যাট কোড বিশদের জন্য দেখুন stat.berkeley.edu/~s133/dates.html
JStrahl

65

সন্ধান করুন ?strftime:

%A বর্তমান লোকালে পুরো সপ্তাহের নাম

df$day = strftime(df$date,'%A')

15
যদি কেউ সপ্তাহের দিনের নম্বর অনুসন্ধান করেছে - এর '%u'পরিবর্তে ব্যবহার করুন'%A'
ভ্লাদ হলুবিভ

64

lubridateপ্যাকেজ এবং ফাংশন ব্যবহার করুন wday:

library(lubridate)
df$date <- as.Date(df$date)
wday(df$date, label=TRUE)
[1] Wed   Wed   Thurs
Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat

11
এই পদ্ধতির ভাল জিনিসটি এটি দিনকে একটি ফ্যাক্টর হিসাবে ফিরিয়ে দেয়, তাই আপনি যদি কোনও চার্ট তৈরি করেন তবে দিনগুলি সঠিক ক্রমে থাকবে।
bobfet1

প্রতিটি দিনের পুরো শব্দটি পেতে (যেমন সান পরিবর্তে রবিবার):abbr = FALSE
স্টিভেক

17

আসুন আমরা বলি যে আপনি সোমবার (রবিবার ডিফল্ট পরিবর্তে) সপ্তাহটি শুরু করতে চান , তবে নিম্নলিখিতটি সহায়ক:

require(lubridate)
df$day = ifelse(wday(df$time)==1,6,wday(df$time)-2)

ফলাফল বিরতিতে দিনগুলি [0, .., 6]।

যদি আপনি অন্তরটি [1, .. 7] হতে চান তবে নিম্নলিখিতটি ব্যবহার করুন:

df$day = ifelse(wday(df$time)==1,7,wday(df$time)-1)

... বা, বিকল্পভাবে:

df$day = df$day + 1

5
আপনি এই যুক্তিটিও ব্যবহার করতে পারেন week_start:wday(df$date, label = TRUE, week_start = 1)

12

এই কৌতুক করতে হবে

df = data.frame(date=c("2012-02-01", "2012-02-01", "2012-02-02")) 
dow <- function(x) format(as.Date(x), "%A")
df$day <- dow(df$date)
df

#Returns:
        date       day
1 2012-02-01 Wednesday
2 2012-02-01 Wednesday
3 2012-02-02  Thursday

6
start = as.POSIXct("2017-09-01")
end = as.POSIXct("2017-09-06")

dat = data.frame(Date = seq.POSIXt(from = start,
                                   to = end,
                                   by = "DSTday"))

# see ?strptime for details of formats you can extract

# day of the week as numeric (Monday is 1)
dat$weekday1 = as.numeric(format(dat$Date, format = "%u"))

# abbreviated weekday name
dat$weekday2 = format(dat$Date, format = "%a")

# full weekday name
dat$weekday3 = format(dat$Date, format = "%A")

dat
# returns
    Date       weekday1 weekday2  weekday3
1 2017-09-01        5      Fri    Friday
2 2017-09-02        6      Sat    Saturday
3 2017-09-03        7      Sun    Sunday
4 2017-09-04        1      Mon    Monday
5 2017-09-05        2      Tue    Tuesday
6 2017-09-06        3      Wed    Wednesday

3

JStrahl এর ফর্ম মন্তব্য format(as.Date(df$date),"%w"), আমরা বর্তমান দিনের সংখ্যা পেতে: as.numeric(format(as.Date("2016-05-09"),"%w"))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.