現在の日付が日付期間間隔の間にあるかどうかを確認し、各日付の結果を個別のExcelシートにエクスポートします

ダニエルG

start_holidayとend_holidayの2つの日付列を持つ日付フレーム(4つの変数)があります。休日の日付範囲内の特定の日付があるかどうかを確認し、その特定の日付の結果を1つのExcelシートとしてエクスポートしようとしています。

私の入力:

df <- tibble::tribble(
      ~Code, ~Member_Id, ~Start.Holiday, ~End.Holiday,
  18100532L,         2L,      20190118L,    20190203L,
  18101425L,         1L,      20190118L,    20190203L,
  18101425L,         2L,      20181218L,    20190102L,
  18102843L,         1L,      20181222L,    20190101L,
  18103202L,         1L,      20190202L,    20190303L,
  18103202L,         2L,      20190202L,    20190303L,
  18104148L,         1L,      20181215L,    20181229L,
  18104148L,         2L,      20181215L,    20181229L,
  18105261L,         1L,      20181204L,    20181230L,
  18105261L,         2L,      20190109L,    20190114L,
  18105261L,         3L,      20181205L,    20181222L,
  18107386L,         1L,      20181205L,    20181222L,
  18107429L,         2L,      20181205L,    20181222L,
  18108931L,         1L,      20181217L,    20190110L,
  18109405L,         1L,      20190123L,    20190208L,
  18109405L,         2L,      20190123L,    20190208L,
  18113785L,         1L,      20190118L,    20190122L,
  18114041L,         1L,      20190118L,    20190122L,
  18114329L,         1L,      20181213L,    20181222L,
  18114329L,         2L,      20181213L,    20181222L)

これまでのところ、1月1日に休暇を過ごしていた人々に提供できるようにしています。しかし、コードを減らしてよりスマートな方法を探しています。1月1日から1月11日までを確認したいとします。この方法では、スクリプトを11回再実行し、日付ごとに個別にエクスポートする必要があります。ある日付がこれらの2つの間隔内にあるかどうかを確認し、各日付について、出力を1つのExcelシートとしてエクスポートするために使用できる方法はありますか?たとえば、1月1日(私のサンプルデータのみを見る)の場合、3人が休暇中で、それらを1つのExcelシートコール0101としてエクスポートし、1月2日の場合、2人が休暇中で、結果を1つのシートコール0201としてエクスポートします。私は十分に明確だったと思います

1月1日のみ

library(lubridate)
library(tidyverse)


df_interval <- df %>%
  janitor::clean_names() %>% 
  mutate(
    Start_H = ymd(start_holiday),
    End_H = ymd(end_holiday), 
    # Create an interval object.
    holiday_Interval = interval(start = Start_H, end = End_H),
    flag = case_when(
      ymd("2019-01-01") %within% holiday_Interval ~ 1,
      TRUE ~ 0)) %>% 
  select(-holiday_Interval)

より明確にするために、望ましい出力 ここに画像の説明を入力してください

PawełChabros

ここで.xlsxは、日付ごとにシート付きの1つのファイルを受け取ります。

library(dplyr)
library(lubridate)
library(openxlsx)


df <- 
  df %>%
  mutate_at(3:4, ymd)

dates <-
  seq(
    df$Start.Holiday %>% min(),
    df$End.Holiday %>% max(),
    1
  ) %>%
  as.character()

wb <- createWorkbook()

for (d in dates) {
  temp <-
    df %>%
    filter(Start.Holiday <= ymd(d) & End.Holiday >= ymd(d))
    addWorksheet(wb, sheetName = d)
    writeData(wb, d, temp)
}

saveWorkbook(wb, 'holidays.xlsx')

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ