9

月ごとの特定の日数をカウントする関数が欲しい..

すなわち。2013 年 11 月 -> 5 金曜日.. 12 月 '13 は 4 金曜日を返します..

これを返すエレガントな関数はありますか?

library(lubridate)

num_days <- function(date){
x <- as.Date(date)  
start = floor_date(x, "month")
count = days_in_month(x)

d = wday(start) 
sol = ifelse(d > 4, 5, 4) #estimate that is the first day of the month is after Thu or Fri then the week will have 5 Fridays
sol
}

num_days("2013-08-01")
num_days(today())

これを行うためのより良い方法は何でしょうか?

4

3 に答える 3

2

それを行うにはいくつかの方法があります。これが1つです:

countFridays <- function(y, m) { 
    fr <- as.Date(paste(y, m, "01", sep="-")) 
    to <- fr + 31       
    dt <- seq(fr, to, by="1 day")      
    df <- data.frame(date=dt, mon=as.POSIXlt(dt)$mon, wday=as.POSIXlt(dt)$wday)  
    df <- subset(df, df$wday==5 & df$mon==df[1,"mon"])         
    return(nrow(df))     
}

月の最初の月と次の月の日を作成します。

次に、月のインデックス (0 から 11 の範囲ですが、これは比較のためにのみ使用します) と平日のデータ フレームを作成します。

次に、a) 同じ月、b) 金曜日にサブセット化します。これが結果セットであり、行数をアンサーとして返します。

これはベース R コードのみを使用することに注意してください。

于 2013-11-11T18:44:07.133 に答える