当我基于lag()函数过滤数据集时,我丢失了每个组中的第一行(因为这些行没有滞后值) . 我怎么能避免这种情况,以便尽管没有任何滞后值,我仍保留第一行?
ds <-
structure(list(mpg = c(21, 21, 21.4, 18.7, 14.3, 16.4), cyl = c(6,
6, 6, 8, 8, 8), hp = c(110, 110, 110, 175, 245, 180)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("mpg",
"cyl", "hp"))
# example of filter based on lag that drops first rows
ds %>%
group_by(cyl) %>%
arrange(-mpg) %>%
filter(hp <= lag(hp))
2 回答
让
filter(hp <= lag(hp))
排除lag(hp)
为NA
的行 . 您可以改为过滤不等式或lag(hp)
,就像每组的顶行一样 .为了清晰和调试,我包括
prev = lag(hp)
为滞后做一个独立的变量 .这会产生:
由于
OP
打算使用<=
(小于或等于)与之前的值,因此使用lag
与default = +Inf
就足够了 .此外,由于
lag
提供了选择order_by
的选项,因此无需在dplyr
链中进行单独的arrange
调用 .因此,解决方案可以写成: