如何在R中按条件删除前导行和尾随行?
有一个数据集,其前导行和尾随行具有零值特征。如何以优雅的方式删除这些行如何在R中按条件删除前导行和尾随行?,r,dplyr,rows,R,Dplyr,Rows,有一个数据集,其前导行和尾随行具有零值特征。如何以优雅的方式删除这些行 # Library library(tidyverse) # 1. Input data.frame( id = c(1:10), value = c(0, 0, 1, 3, 0, 1, 2, 8, 9, 0)) # 2. Delete leading and trimming rows with 'value = 0' # ... # 3. Desired outcome data.frame( id =
# Library
library(tidyverse)
# 1. Input
data.frame(
id = c(1:10),
value = c(0, 0, 1, 3, 0, 1, 2, 8, 9, 0))
# 2. Delete leading and trimming rows with 'value = 0'
# ...
# 3. Desired outcome
data.frame(
id = c(3:9),
value = c(1, 3, 0, 1, 2, 8, 9))
谢谢。一个选项是
library(dplyr)
df1 %>%
filter( cumsum(value) > 0 & rev(cumsum(rev(value)) > 0))
# id value
#1 3 1
#2 4 3
#3 5 0
#4 6 1
#5 7 2
#6 8 8
#7 9 9
下面是一个简单的破解:
df %>%
mutate(value2 = cumsum(value)) %>%
filter(value2 != 0) %>%
filter(!(value2 == max(value2) & value == 0)) %>%
select(-value2)
id value
1 3 1
2 4 3
3 5 0
4 6 1
5 7 2
6 8 8
7 9 9
一个选项是检查该值是否等于0,并且rleidvalue是否处于其最小值或最大值,即您处于第一组或最后一组值中。即使要保留的非零值为负值,这也会起作用
library(data.table)
setDT(df)
df[!(value == 0 & (rid <- rleid(value)) %in% range(rid))]
# id value
# 1: 3 1
# 2: 4 3
# 3: 5 0
# 4: 6 1
# 5: 7 2
# 6: 8 8
# 7: 9 9
如果事先知道第一个和最后一个值始终为零,则只需检查第二个条件
df[!((rid <- rleid(value)) %in% range(rid))]