我对这篇文章有一个类似的问题(如何找到第一个非零元素和最后一个非零元素和 TRIM 向量)
但我正在寻找 dplyr 解决方案,因为我想包括一个
d %>%
group_by(id) %>%
另外声明。
我有一个数据框:
d<-data.frame(time = factor(c("00:00","00:15","00:30","00:45", "01:00","01:15","01:30","01:45","02:00","02:40" )), q=c(0,0,100,0,0,100,0,0,0,0),p=c(.25,.25,.25,.25,.25,.25,.25,.25,.25,.25))
d
time q p
1 00:00 0 0.25
2 00:15 0 0.25
3 00:30 100 0.25
4 00:45 0 0.25
5 01:00 0 0.25
6 01:15 100 0.25
7 01:30 0 0.25
8 01:45 0 0.25
9 02:00 0 0.25
10 02:40 0 0.25
我想消除列“q”的第一个非零索引之前和列“q”的最后一个非零索引之后的数据框行。在上述情况下,结果应如下所示:
00:30 100 0.25
00:45 0 0.25
01:00 0 0.25
01:15 100 0.25
@akrun 给出了这个问题的解决方案:
indx <- which(d$q!=0)
d[indx[1L]:indx[length(indx)],]
这有效,但我正在寻找 dplyr 解决方案,因为我想跨多个组执行此计算。
一种选择可能是:
d %>%
filter(row_number() %in% Reduce(`:`, which(q != 0)))
time q p
1 00:30 100 0.25
2 00:45 0 0.25
3 01:00 0 0.25
4 01:15 100 0.25
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句