问题描述:
从下表中,我想删除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
我该如何编码?
答案 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行(待选)的范围