【发布时间】:2022-01-03 08:20:06
【问题描述】:
我有一个像下面这样的数据集
| ID | col1 | col2 |
|---|---|---|
| 1 | 042 | 10 |
| 2 | 353 | 13 |
| 3 | 403 | 03 |
| 4 | 642 | 22 |
我只想过滤掉 col1 中以 4 开头的值的行。这包括具有 04 的 row1,但不包括第 4 行。col1 是一个字符列。
最终的数据集应该是这样的。
| ID | col1 | col2 |
|---|---|---|
| 2 | 353 | 13 |
| 4 | 642 | 22 |
谢谢!
【问题讨论】:
我有一个像下面这样的数据集
| ID | col1 | col2 |
|---|---|---|
| 1 | 042 | 10 |
| 2 | 353 | 13 |
| 3 | 403 | 03 |
| 4 | 642 | 22 |
我只想过滤掉 col1 中以 4 开头的值的行。这包括具有 04 的 row1,但不包括第 4 行。col1 是一个字符列。
最终的数据集应该是这样的。
| ID | col1 | col2 |
|---|---|---|
| 2 | 353 | 13 |
| 4 | 642 | 22 |
谢谢!
【问题讨论】:
我们可以使用正则表达式'^0+4|^4' 将str_detect 与filter 组合起来,这表示以0 开头一次或多次后跟4 或以4 开头。
代码:
library(tidyverse)
df <- read_table("ID col1 col2
1 042 10
2 353 13
3 403 03
4 642 22")
df %>%
filter(!str_detect(col1, '^0+4|^4'))
#> # A tibble: 2 × 3
#> ID col1 col2
#> <dbl> <chr> <chr>
#> 1 2 353 13
#> 2 4 642 22
由reprex package (v2.0.1) 于 2021 年 11 月 24 日创建
【讨论】:
你可以试试
library(dplyr)
df %>%
filter(substring(as.numeric(col1),1,1) != "4")
ID col1 col2
1 2 353 13
2 4 642 22
【讨论】: