以下是我通过运行查询获得的数据帧。请注意,df1是一个动态数据帧,它可能会返回一个空的df或部分df而不是所有的四分之一,如下所示:
df1 FISC_QTR_VAL Revenue 1 2014-Q1 0.00 2 2014-Q2 299111.86 3 2014-Q3 174071.98 4 2014-Q4 257655.30 5 2015-Q1 0.00 6 2015-Q2 317118.63 7 2015-Q3 145461.88 8 2015-Q4 162972.41 9 2016-Q1 96896.04 10 2016-Q2 135058.78 11 2016-Q3 111773.77 12 2016-Q4 138479.28 13 2017-Q1 169276.04
我想检查Revenue列中所有行的值,看看是否有任何值为0或者是否为负,不包括2014-Q1行
此外,df1是动态的,只包含12个季度的数据,即当我到达下一个qtr即2017年第2季度时,与2014年第2季度相关的收入变为0,它将如下所示:
df1 FISC_QTR_VAL Revenue 1 2014-Q1 0.00 2 2014-Q2 0.00 3 2014-Q3 174071.98 4 2014-Q4 257655.30 5 2015-Q1 0.00 6 2015-Q2 317118.63 7 2015-Q3 145461.88 8 2015-Q4 162972.41 9 2016-Q1 96896.04 10 2016-Q2 135058.78 11 2016-Q3 111773.77 12 2016-Q4 138479.28 13 2017-Q1 169276.04 14 2017-Q2 146253.64
在上述情况下,我需要通过排除2014年第一季度和2014年第二季度来检查“收入”列的所有行
随着季度的进展,这种情况继续发展
需要您的帮助来生成代码,该代码将动态执行上述排除行的所有步骤,并仅检查特定季度的重要行
目前,我使用以下代码:
Width
第一个IF循环检查df1中是否有数据 如果df为空,
df1[["FISC_QTR_VAL"]][nrow(df1)-10] == startQtr条件将返回数字(0),其长度为0,因此条件失败
如果没有,则转到下一个IF循环并检查Revenue列中的-ve和0值。但它适用于所有行。我希望在这种情况下排除2014年第一季度,并且未来几个季度,我希望条件是动态的,如上所述。
此外,我不想在if条件之前切片数据集,因为如果初始数据帧df1返回1行或2行并且我们尝试将其进一步切片,则代码会抛出错误
由于
答案 0 :(得分:0)
以下是使用dplyr
和tidyr
软件包中的一些函数的解决方案。
这是一个可以使用的玩具数据集:
d <- data.frame(
FISC_QTR_VAL = c("2015-Q1", "2014-Q2", "2014-Q1", "2015-Q2"),
Revenue = c(100, 200, 0, 0)
)
d
#> FISC_QTR_VAL Revenue
#> 1 2015-Q1 100
#> 2 2014-Q2 200
#> 3 2014-Q1 0
#> 4 2015-Q2 0
请注意,FISC_QTR_VAL
故意无序(作为预防措施)。
接下来,设置当前年份和季度的变量(您将看到为什么分开的原因):
current_year <- 2014
current_quarter <- 2
然后运行以下命令:
d %>%
separate(FISC_QTR_VAL, c("year", "quarter"), sep = "-Q") %>%
arrange(year, quarter) %>%
slice(which(year == current_year & quarter == current_quarter):n()) %>%
filter(Revenue <= 0)
#> year quarter Revenue
#> 1 2015 2 0
首先,我们separate()
将FISC_QTR_VAL
分为year
和quarter
个变量,用于(a)整洁的数据集和(b)订购数据的方式情况它是乱序的(如在这里使用的玩具)。然后我们arrange()
数据,以便按year
和quarter
排序。然后,我们slice()
离开当前版本之前的任何季度,然后filter()
返回Revenue <= 0
所有行。
或者,例如,为了获得返回的行数的计数,您可以管道nrow()
之类的内容。
答案 1 :(得分:0)
您是否可以选择subset
函数?
exclude.qr <- c("2014-Q1", "2014-Q2")
df <- data.frame(
FISC_QTR_VAL = c("2014-Q1", "2014-Q2", "2014-Q3", "2014-Q4"),
Revenue = c(0.00, 299111.86, 174071.98, 257655.30))
subset(
df,
FISC_QTR_VAL != exclude.qr, Revenue > 0)
您可以轻松地动态创建exclue.qr,例如通过paste
和years <- 2010:END
。
我希望这对您有所帮助!