【问题标题】:R dplyr conditional sum with mutateR dplyr 条件和与 mutate
【发布时间】:2017-04-27 19:00:06
【问题描述】:

我目前有以下格式的数据集

id, date,         category,      city
1, 2016-01-01,       A            CityA
2, 2016-01-01,       B            CityA

等等。

我正在尝试使用 mutate,以便它可以在过去 30 天或 x 时间范围内为我提供有条件的运行计数。

首先我尝试使用它来查看它是否有效并从那里扩展它

  mutate(df, last_thirty_day_count = sum(df$id < id & df$city == city))

但它只是给了我零。

感谢任何帮助。

【问题讨论】:

  • 为什么你的数据集中有大写字母而你的代码中有小写字母? ID 与 id,City 与 City?
  • 对不起,这是无意的
  • 也许您可以展示一个您想要的输出示例?

标签: r count sum dplyr conditional


【解决方案1】:

首先,这是一个稍长的示例数据集

set.seed(8675309)
sampleData <-
  data_frame(id = 1:20
             , date = seq(as.Date("2017-01-01")
                          , as.Date("2017-01-20")
                          , by = "day")
             , category = sample(LETTERS[1:3], 20, TRUE)
             , city = sample(letters[1:3], 20, TRUE)
             )

然后,只需决定什么是合格的观察。从您的问题中不清楚您要使用什么截止。在这里,我使用 1 月 4 日作为截止日期,但您可以使用适合您情况的任何时间。然后,group_by 您要计算的变量,然后将它们相加。这假设它们是按顺序排列的,如果不是,请确保先arrange 他们。

sampleData %>%
  mutate(QualifiyingObs = date > "2017-01-04") %>%
  group_by(city) %>%
  mutate(CountOfQual = cumsum(QualifiyingObs))

给予

      id       date category  city QualifiyingObs CountOfQual
   <int>     <date>    <chr> <chr>          <lgl>       <int>
1      1 2017-01-01        A     a          FALSE           0
2      2 2017-01-02        B     c          FALSE           0
3      3 2017-01-03        C     c          FALSE           0
4      4 2017-01-04        C     a          FALSE           0
5      5 2017-01-05        A     b           TRUE           1
6      6 2017-01-06        C     c           TRUE           1
7      7 2017-01-07        C     a           TRUE           1
8      8 2017-01-08        C     a           TRUE           2
9      9 2017-01-09        C     a           TRUE           3
10    10 2017-01-10        B     c           TRUE           2
11    11 2017-01-11        C     c           TRUE           3
12    12 2017-01-12        B     c           TRUE           4
13    13 2017-01-13        B     a           TRUE           4
14    14 2017-01-14        A     b           TRUE           2
15    15 2017-01-15        C     a           TRUE           5
16    16 2017-01-16        C     b           TRUE           3
17    17 2017-01-17        C     b           TRUE           4
18    18 2017-01-18        A     b           TRUE           5
19    19 2017-01-19        C     a           TRUE           6
20    20 2017-01-20        C     c           TRUE           5

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 2015-03-20
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多