Как идентифицировать наблюдения с несколькими сопоставляемыми образцами и создать другую переменную в R? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь создать широкую отраслевую категорию из подробных категорий в моих данных.Мне интересно, где я ошибаюсь при создании этого с grepl в R?

Мой пример данных выглядит следующим образом:

df <- data.frame(county = c(01001, 01002, 02003, 04004, 08005, 01002, 02003, 04004),
                  ind = c("0700","0701","0780","0980","1000","1429","0840","1500"))

Я пытаюсь создать переменную под названием промышленность с 2 уровнями(например, agri, manufacturing) с помощью команд grepl или str_replace в R.

Я пробовал это:

newdf$industry <- ""
newdf[df$ind %>% grepl(c("^07|^08|^09", levels(df$ind), value = TRUE)), "industry"] <- "Agri"

Но это дает мне следующую ошибку:

  argument 'pattern' has length > 1 and only the first element will be used

Я хочу получить следующий фрейм данных в качестве моего результата:

newdf <- data.frame(county = c(01001, 01002, 02003, 04004, 08005, 01002, 02003, 04004),
                 ind = c("0700","0701","0780","0980","1000","1429","0840","1500"),
                 industry = c("Agri", "Agri", "Agri", "Agri", "Manufacturing", "Manufacturing", "Agri", "Manufacturing"))

Поэтому мой вопрос состоит в том, как мне указать, начинается ли переменная 'ind' с 07,08 или 09, моя отрасльпеременная будет принимать значение «agri», если «ind» начинается с 10, 14 или 15, отрасль будет «производство»?Само собой разумеется, существует огромный список отраслевых кодов, которые я пытаюсь разбить на 10 категорий, поэтому я ищу решение, которое поможет мне сделать это с распознаванием образов.

Любая помощь приветствуется!Спасибо!

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Это работает, используя ifelse() для добавления нужного столбца в df data.frame

df$industry <- ifelse(grepl(paste0("^", c('07','08','09'), collapse = "|"), df$ind), "Agri", "Manufacturing")

> df
  county  ind      industry
1   1001 0700          Agri
2   1002 0701          Agri
3   2003 0780          Agri
4   4004 0980          Agri
5   8005 1000 Manufacturing
6   1002 1429 Manufacturing
7   2003 0840          Agri
8   4004 1500 Manufacturing
1 голос
/ 08 апреля 2019

Попробуйте это:

newdf = df %>% 
  mutate(industry = ifelse(str_detect(string = ind,
                                      pattern = '^07|^08|^09'),
                          'Agri',
                          'Manufacturing'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...