요일 찾기


215

R 날짜가 있고 다음과 같이 형식이 지정되었다고 가정 해 봅시다.

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

R에서 날짜와 관련된 요일로 다른 열을 추가하는 방법이 있습니까? 데이터 세트는 실제로 크기가 크므로 수동으로 변경하고 변경하는 것은 의미가 없습니다.

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??
Shambho 2016 년

3
@ Shambho 나는 이것을 할 수 있다고 생각한다 : setNames(0:6, c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))[weekdays(as.Date(df$date))]. 이름이 마음에 들지 않으면 unname()둘러 쌀 수 있습니다.
G

6
가능한 날짜로부터 요일 번호 (0-6, Sun-Sat)를 가져 오려면 format (as.Date (df $ date), "% w"). 형식 코드에 대한 자세한 내용은 stat.berkeley.edu/~s133/dates.html
JStrahl

65

조회 ?strftime:

%A 현재 로케일의 전체 요일 이름

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

15
누군가가 평일 번호를 검색 한 경우 – '%u'대신 사용'%A'
Vlad Holubiev

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
stevec

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)
mrub

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.