删除与 r 中的特定条件不匹配的行

Removing rows that do not match a certain condition in r

提问人:confusedindividual 提问时间:4/6/2022 最后编辑:Maëlconfusedindividual 更新时间:4/6/2022 访问量:1575

问:

我有一个包含多列的数据帧,我想删除不满足特定条件的行。我只想将数据帧中 -1 后跟 1 的行保留在其中一列中。

示例 data.frame

    column a   column b
1     1          1
2     3         -1
3     8          1
4     10        -1
5     12         1
6     15         1

输出示例:

    column a   column b
1     3         -1
2     8          1
3     10        -1
4     12         1

example dataframe example output

r 数据帧 删除

评论


答:

3赞 Gregor Thomas 4/6/2022 #1

您可以使用:dplyr

library(dplyr)
your_data %>%
  filter(
    (`column b` == -1 & lead(`column b`) == 1) |
    (`column b` == 1 & lag(`column b`) == -1)
  )
#   column a column b
# 2        3       -1
# 3        8        1
# 4       10       -1
# 5       12        1

使用此输入数据:

your_data = read.table(text = '    "column a"   "column b"
1     1          1
2     3         -1
3     8          1
4     10        -1
5     12         1
6     15         1', header = T, check.names = FALSE)
2赞 Maël 4/6/2022 #2
library(tidyverse)
df %>% 
  group_by(grp = cumsum(lead(df$column_b) == 1 & df$column_b == -1)) %>% 
  filter(grp > 0, row_number() %in% 1:2)

# A tibble: 4 x 3
# Groups:   grp [2]
  column_a column_b   grp
     <int>    <int> <int>
1        3       -1     1
2        8        1     1
3       10       -1     2
4       12        1     2