删除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