简体   繁体   English

根据两列中的值在 R 中创建新列

[英]Create new column in R based upon values in two columns

I have the following df, which summarizes values based on date:我有以下 df,它根据日期汇总值:

df <- data_frame(
ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20),
Date = c("28/01/2019", "28/01/2019", "29/01/2019", "29/01/2019", 
         "30/01/2019", "30/01/2019", "31/01/2019", "31/01/2019", 
         "01/02/2019", "01/02/2019", "04/02/2019", "04/02/2019", 
         "05/02/2019", "05/02/2019", "06/02/2019", "06/02/2019", 
         "07/02/2019", "07/02/2019", "08/02/2019", "08/02/2019"),
WeekYear = c("2019-05", "2019-05", "2019-05", "2019-05", "2019-05", "2019- 
              05", "2019-05", "2019-05", "2019-05", "2019-05", "2019-06", 
             "2019-06", "2019-06", "2019-06", "2019-06", "2019-06", "2019- 
              06", "2019-06", "2019-06", "2019-06"),
DayFilter = c("Public Holiday", "Public Holiday", "Work-Day", "Work-Day", 
              "Work-Day", "Work-Day", "Work-Day", "Work-Day", "Work-Day", 
              "Work-Day", "Work-Day", "Work-Day", "Work-Day", "Work-Day", 
              "Work-Day", "Work-Day", "Work-Day", "Work-Day", "Work-Day", 
              "Work-Day"),
Value = c(0, 0, 7, 3, 8, 4, 1, 0, 9, 6, 4, 5, 7, 2, 4, 9, 5, 7, 4, 1))

df

      ID Date       WeekYear  DayFilter      Value
   <dbl> <chr>      <chr>    <chr>          <dbl>
 1     1 28/01/2019 2019-05  Public Holiday     0
 2     2 28/01/2019 2019-05  Public Holiday     0
 3     3 29/01/2019 2019-05  Work-Day           7
 4     4 29/01/2019 2019-05  Work-Day           3
 5     5 30/01/2019 2019-05  Work-Day           8
 6     6 30/01/2019 2019-05  Work-Day           4
 7     7 31/01/2019 2019-05  Work-Day           1
 8     8 31/01/2019 2019-05  Work-Day           0
 9     9 01/02/2019 2019-05  Work-Day           9
10    10 01/02/2019 2019-05  Work-Day           6
11    11 04/02/2019 2019-06  Work-Day           4
12    12 04/02/2019 2019-06  Work-Day           5
13    13 05/02/2019 2019-06  Work-Day           7
14    14 05/02/2019 2019-06  Work-Day           2
15    15 06/02/2019 2019-06  Work-Day           4
16    16 06/02/2019 2019-06  Work-Day           9
17    17 07/02/2019 2019-06  Work-Day           5
18    18 07/02/2019 2019-06  Work-Day           7
19    19 08/02/2019 2019-06  Work-Day           4
20    20 08/02/2019 2019-06  Work-Day           1

My goal is to create a new column that categorizes any week of the year that has a public holiday in it as incomplete , based upon the weekyear column.我的目标是创建一个新列,根据weekyear列将一年中有公共假期的任何一周归类为incomplete This way I can limit analyses to weeks where there were five business days这样我就可以将分析限制在有五个工作日的几周内

Desire output below下面的愿望输出

        ID    Date    WeekYear DayFilter      WeekFilter    Value
       <dbl> <chr>    <chr>    <chr>          <chr>         <dbl>
   1     1 28/01/2019 2019-05  Public Holiday Incomplete     0
   2     2 28/01/2019 2019-05  Public Holiday Incomplete     0
   3     3 29/01/2019 2019-05  Work-Day       Incomplete     7
   4     4 29/01/2019 2019-05  Work-Day       Incomplete     3
   5     5 30/01/2019 2019-05  Work-Day       Incomplete     8
   6     6 30/01/2019 2019-05  Work-Day       Incomplete     4
   7     7 31/01/2019 2019-05  Work-Day       Incomplete     1
   8     8 31/01/2019 2019-05  Work-Day       Incomplete     0
   9     9 01/02/2019 2019-05  Work-Day       Incomplete     9
  10    10 01/02/2019 2019-05  Work-Day       Incomplete     6
  11    11 04/02/2019 2019-06  Work-Day       Complete       4
  12    12 04/02/2019 2019-06  Work-Day       Complete       5
  13    13 05/02/2019 2019-06  Work-Day       Complete       7
  14    14 05/02/2019 2019-06  Work-Day       Complete       2
  15    15 06/02/2019 2019-06  Work-Day       Complete       4
  16    16 06/02/2019 2019-06  Work-Day       Complete       9
  17    17 07/02/2019 2019-06  Work-Day       Complete       5
  18    18 07/02/2019 2019-06  Work-Day       Complete       7
  19    19 08/02/2019 2019-06  Work-Day       Complete       4
  20    20 08/02/2019 2019-06  Work-Day       Complete       1

My attempts so far have successfully created a WeekFilter column with Incomplete as a value.到目前为止,我的尝试已成功创建了一个以Incomplete作为值的WeekFilter列。 However, it is limited to the specific date of the public holiday.但是,仅限于公共假期的特定日期。 The part I am struggling to figure out is how to generalize it to the rest of the week, which I figure needs to incorporate the WeekYear column into this statement我正在努力弄清楚的部分是如何将其推广到本周剩余时间,我认为需要将WeekYear列合并到此声明中

df$WeekFilter = df$WeekYear
df$WeekFilter[df$DayFilter == "Public Holiday"] <- "Incomplete"

Any assistance would be greatly appreciated任何帮助将不胜感激

We may use group_by and mutate :我们可以使用group_bymutate

df %>% group_by(WeekYear) %>% 
  mutate(WeekFilter = if("Public Holiday" %in% DayFilter) "Incomplete" else "Complete")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM