删除R中某一点后的行

  • 本文关键字:一点 删除 r dataset row
  • 更新时间 :
  • 英文 :


我有一个数据集,在某个列值出现后,我想删除其中的行

数据集示例:

a<-data.frame(Account=c('A','A','A','A','A','A','A','A','A'),
ProcessDate=seq(as.Date('2020-01-01'),as.Date('2020-09-01'),by='month'),
Payment=c(1,2,3,4,5,6,7,8,9),
ColumnCriteria=c(610,610,610,610,610,650,610,610,610))   

我想删除ColumnCriteria=650之后的行。

我的问题是,我使用的是一个大数据集,所以我不能只将filter函数与几个lags一起使用,因为在本例中650的位置对于另一个帐户来说会有所不同。

我想我可能会写一个if_else语句,如果ColumnCriteria等于650,那么返回Date,然后我可以尝试用该日期填充列,然后过滤ProcessDate较大的行。这看起来有点乱,所以我想我应该联系一下,看看是否有人有任何建议。

谢谢!

考虑slice:

library(dplyr)
slice(a, 1:which(ColumnCriteria == 650, arr.ind = TRUE))
Account ProcessDate Payment ColumnCriteria
1       A  2020-01-01       1            610
2       A  2020-02-01       2            610
3       A  2020-03-01       3            610
4       A  2020-04-01       4            610
5       A  2020-05-01       5            610
6       A  2020-06-01       6            650

注意:如果截断值出现多次,则此表达式将仅使用该值的第一个实例(按a的行顺序排序(。

通过使用which():创建索引来尝试此base R解决方案

#Data
a<-data.frame(Account=c('A','A','A','A','A','A','A','A','A'),
ProcessDate=seq(as.Date('2020-01-01'),as.Date('2020-09-01'),by='month'),
Payment=c(1,2,3,4,5,6,7,8,9),
ColumnCriteria=c(610,610,610,610,610,650,610,610,610))   
#Index
i <- min(which(a$ColumnCriteria==650))
#Code
a2 <- a[1:i,]

输出:

a2
Account ProcessDate Payment ColumnCriteria
1       A  2020-01-01       1            610
2       A  2020-02-01       2            610
3       A  2020-03-01       3            610
4       A  2020-04-01       4            610
5       A  2020-05-01       5            610
6       A  2020-06-01       6            650

根据您的描述,听起来您需要按Account操作,并且您的数据是按Payment隐式排序的,尽管您没有提供足够完整的数据集来真正证明这一点。你熟悉dplyr::group_by()吗?

a %>%
group_by(Account) %>%
arrange(Payment) %>%
filter(cumsum(tidyr::replace_na(lag(ColumnCriteria == 650), 0)) == 0)

具有matchseq的选项

a[seq_len(match(650, a$ColumnCriteria)),]
#  Account ProcessDate Payment ColumnCriteria
#1       A  2020-01-01       1            610
#2       A  2020-02-01       2            610
#3       A  2020-03-01       3            610
#4       A  2020-04-01       4            610
#5       A  2020-05-01       5            610
#6       A  2020-06-01       6            650

相关内容

  • 没有找到相关文章

最新更新