使用dplyr根据条件R过滤时间序列数据

时间:2017-06-22 18:33:05

标签: r dplyr time-series

我有一个时间序列数据,如下所示。

                         keyword             byMonth        n_views
business tax preparation software           Dec-2016              5
    corporate income tax solution           Nov-2016              3
    corporate income tax solution           Mar-2017              2
          corporate tax provision           Dec-2016              5
          corporate tax provision           Oct-2016              1
                  data collection           Mar-2017             39
                  data collection           May-2017             26
                  data collection           Apr-2017             22
                  data collection           Feb-2017             15
                  data collection           Jan-2017             15
                  data collection           Nov-2016             13
                  data collection           Dec-2016              7
                  data collection           Oct-2016              6

我想使用dplyr或任何其他方便的方法仅选择2016年10月至2017年5月期间的那些keywords。因此,在这种情况下,只有与Keyword: data collection相关的观察结果应该是输出。我很难搞清楚这一点。非常感谢。

1 个答案:

答案 0 :(得分:2)

我们可以使用dplyrtidyr中的功能。 dt2中的关键字是具有完整月份覆盖率的案例。

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  # Spread the data frame
  spread(byMonth, n_views) %>%
  # Filter rows without any NA
  filter(rowSums(!is.na(.)) == ncol(.))

更新:将数据帧转换回原始格式

如果需要原始格式,我们可以使用gather将其转换回来。

dt3 <- dt2 %>%
  gather(byMonth, n_views, -keyword)

数据准备

dt <- read.table(text = "                        keyword             byMonth        n_views
'business tax preparation software'           'Dec-2016'              5
               'corporate income tax solution'           'Nov-2016'              3
               'corporate income tax solution'           'Mar-2017'              2
               'corporate tax provision'           'Dec-2016'              5
               'corporate tax provision'           'Oct-2016'              1
               'data collection'           'Mar-2017'             39
               'data collection'           'May-2017'             26
               'data collection'           'Apr-2017'             22
               'data collection'           'Feb-2017'             15
               'data collection'           'Jan-2017'             15
               'data collection'           'Nov-2016'             13
               'data collection'           'Dec-2016'              7
               'data collection'           'Oct-2016'              6",
               header = TRUE, stringsAsFactors = FALSE)