【问题标题】:Create new column in R based upon values in two columns根据两列中的值在 R 中创建新列
【发布时间】:2019-01-29 00:36:49
【问题描述】:

我有以下 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

我的目标是创建一个新列,根据weekyear 列将一年中任何有公共假期的星期归类为incomplete。这样我可以将分析限制在有五个工作日的几周内

下面的愿望输出

        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

到目前为止,我的尝试已成功创建了一个 WeekFilter 列,其中 Incomplete 作为值。但是,仅限于公共假期的具体日期。我正在努力弄清楚的部分是如何将其推广到本周的剩余时间,我认为需要将 WeekYear 列合并到此语句中

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

任何帮助将不胜感激

【问题讨论】:

    标签: r dataframe dplyr tidyverse


    【解决方案1】:

    我们可能会使用group_bymutate

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

    【讨论】:

    • 谢谢朱利叶斯 - 完美地完成了这个伎俩。将来我会记住 group_by/mutate 之类的任务:)
    猜你喜欢
    • 2022-07-05
    • 2020-08-13
    • 2023-01-24
    • 2022-09-30
    • 2022-01-11
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多