根据R中的某些条件动态删除行

时间:2016-07-19 17:07:54

标签: r

问题描述:

从下表中,我想删除2014-Q3季度值以上的所有行,即1,2行 另请注意,这是一个动态数据集。这意味着当我们进入下一季度即2016-Q3时,我想通过代码自动删除2014-Q4季度值以上的所有行,无需任何人工干预 (当我们搬到2016 - Q4的下一个qtr时,想要删除2015-Q1以上的所有行,依此类推)

我有一个变量,它捕获了我希望在最终数据框架中看到的第一季度(在本例中为2014-Q3),并且随着我们未来的进展,这个变量会发生变化

          QTR                  Revenue
1       2014-Q1                 456
2       2014-Q2                 3113
3       2014-Q3                 23
4       2014-Q4                 173
5       2015-Q1                 1670
6       2015-Q2                 157
7       2015-Q3                 115
..        ..                    ..
10      2016-Q2                 232

我该如何编码?

2 个答案:

答案 0 :(得分:0)

以下是使用which的半自动方法:

myFunc <- function(df, year, quarter) {
  dropper <- paste(year, paste0("Q",(quarter-1)), sep="-")
  df[-(1:which(as.character(df$QTR)==dropper)),]
}

myFunc(df, 2014, 3)
      QTR Revenue
3 2014-Q3      23
4 2014-Q4     173
5 2015-Q1    1670
6 2015-Q2     157
7 2015-Q3     115

要子集,您只需分配输出

即可
dfNew <- myFunc(df, 2014, 3)

此时,您可以非常轻松地更改年份和季度以执行新的子集。

答案 1 :(得分:0)

谢谢lmo 正在阅读文章,我认为我们可以使用dplyr包以更简单的方式执行此操作:

>df % slice((nrow(df)-7):(nrow(df)))

获取以下结果

>df
3       2014-Q3                 23
4       2014-Q4                 173
5       2015-Q1                 1670
6       2015-Q2                 157
7       2015-Q3                 115
..        ..                    ..
10      2016-Q2                 232

这也将以动态方式起作用,因为一旦我们在2016年至第二季度之后输入更多行,则由nrow函数维持8行(待选)的范围