删除R中某一点之后的行

删除R中某一点之后的行,r,dataset,row,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), Column

我有一个数据集,我想在某个列值出现后删除这些行

数据集的一个示例:

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))   

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


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


从您的描述来看,您似乎需要通过
帐户
进行操作,并且您的数据是按照
付款
隐式排序的,尽管您没有提供足够完整的数据集来真正演示这一点。您是否熟悉
dplyr::group_by()


从您的描述来看,您似乎需要通过
帐户
进行操作,并且您的数据是按照
付款
隐式排序的,尽管您没有提供足够完整的数据集来真正演示这一点。您是否熟悉
dplyr::group_by()

考虑:

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

请考虑:


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

带有
匹配和
序列的选项

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

带有
match
seq

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

您的
ColumnCriteria
定义缺少一个值。650保证只出现一次吗?您的
ColumnCriteria
定义缺少一个值。650保证只出现一次吗?
a %>%
  group_by(Account) %>%
  arrange(Payment) %>%
  filter(cumsum(tidyr::replace_na(lag(ColumnCriteria == 650), 0)) == 0)
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[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