Я новичок в R, поэтому заранее благодарю вас за терпение и помощь!

Вот набор данных:

Zipcode <- as.character(c(28237:28242,18237:18240))
Property_id <- as.character(c(1134730:1134739))
x <- data.frame(Property_id,Zipcode)

Я хотел бы отфильтровать все почтовые индексы, начинающиеся с «18». Окончательный набор данных x должен содержать только почтовые индексы, начинающиеся с 28.

Я думаю, мне нужно использовать grepl. Я просто не уверен, как бы я это закодировал.

Любые предложения или помощь приветствуются!

0
Estefan 4 Фев 2022 в 03:35

3 ответа

Среди многих подходов к решению этой проблемы вы можете использовать отрицательный grepl и искать совпадение с началом строки (^), как вы описали.

x %>% filter(!grepl("^18",Zipcode))
  Property_id Zipcode
1     1134730   28237
2     1134731   28238
3     1134732   28239
4     1134733   28240
5     1134734   28241
6     1134735   28242

Или, лучше, используйте цифры и сделайте логическое сравнение

x %>% filter(as.numeric(Zipcode)>19000)
  Property_id Zipcode
1     1134730   28237
2     1134731   28238
3     1134732   28239
4     1134733   28240
5     1134734   28241
6     1134735   28242
0
Andre Wildberg 4 Фев 2022 в 04:19

Просто используйте функцию substr из пакета base:

# base R:
x[substr(x$Zipcode, 1, 2) != "18", ]

# filter function from dplyr:
x %>% filter(substr(Zipcode, 1, 2) != "18")
0
iln17 4 Фев 2022 в 04:20
x[substr(Zipcode, 1, 2) != '18', ]
0
Sweepy Dodo 4 Фев 2022 в 04:43