При изменении уровней факторов неизвестные уровни в f не могут изменить уровни

У меня есть фактор, содержащий названия многих отраслей. Мне нужно разделить их на основные категории и отрасли. Например, поскольку я позволял респондентам отвечать, что они хотят, у меня есть завышенное количество уровней (например, финансовые услуги, финансовые услуги, банковское дело, финансы). Поскольку эти случаи не совпадают, они выходят на дополнительный уровень, поэтому я пытаюсь свернуть их с помощью forcats:

test <- fct_collapse(PrescreenF$Industry, Finance = c("Banking",
  "Corporate Finance", "Finance", "Financial", "financial services",
  "financial services", "Financial Services", "Financial services"),
  NULL = "H")

Получаю предупреждение: «Финансовые услуги» неизвестны. Это очень неприятно, потому что когда я вызываю вектор, я вижу, что он действительно существует. Я пробовал скопировать и вставить точные слова из звонка, переписать его, и кажется, что есть скрытые символы, которые не позволяют его изменить.

Как мне правильно свернуть эти значения?

-> test$industry
Banking
Corporate Finance 
Finance Financial 
financial services
financial services 
Financial Services 
Financial services

Когда я перехожу к «переоценке», скажем, на последнем уровне «Финансовые услуги», он сообщает мне, что это неизвестная строка.

РЕДАКТИРОВАТЬ вывод dput (x $ промышленности)

structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 
4L, 3L, 3L, 3L, 5L, 7L, 8L, 9L, 10L, 11L, 12L, 12L, 13L, 14L, 
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 16L, 16L, 16L, 16L, 
16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 
16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 17L, 18L, 18L, 18L, 
18L, 19L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 25L, 26L, 27L, 28L
), .Label = c("", "{\"ImportId\":\"QID8_TEXT\"}", "Finance", 
"Financial ", "Financial services ", "Please indicate the industry you work in (e.g. technology, healthcare etc):", 
"Cleantech", "Delivery", "e-commerce/fashion", "Food", "Food & Bev", 
"Retail", "Service", "tech", "technology", "Technology", "IT, technology", 
"Software", "Technology ", "Tehcnology", "Consulting", "Digital advertising", 
"Education", "Higher education", "Technology, management consulting", 
"University professor; teaching, research and service", "Information Technology and Services", 
"mobile technology"), class = "factor")

РЕДАКТИРОВАТЬ Разобрался. В некоторых терминах после окончания был лишний пробел. Например, хотя когда я называл Prescreen $ Industry, он возвращал несколько имен, таких как «Банковское дело» и «Корпоративные финансы», он не говорил мне, что после уровня был пробел. Банковское дело было на самом деле… «Банковским делом» с невидимым пространством, которое не отображалось в R. Как сделать так, чтобы это было видимым и не повторится?

Могу ли я запустить функцию len в столбце? Если да, то как это работает? PrescreenF $ Industry («Банковское дело»)?


person D500    schedule 05.10.2017    source источник
comment
Пожалуйста, поделитесь воспроизводимым примером ваших данных, чтобы мы могли решить эту проблему.   -  person Richard Lusch    schedule 05.10.2017
comment
если есть скрытые символы, вероятно, это пробелы. stringr::str_trim может помочь, но вам нужно сначала изменить множители на символ, а затем обратно на множитель.   -  person shea    schedule 05.10.2017
comment
Можете ли вы опубликовать результат dput(test$industry) или dput(head(test, 20))?   -  person Rui Barradas    schedule 05.10.2017
comment
@RuiBarradas Только что добавил новый раздел редактирования.   -  person D500    schedule 05.10.2017
comment
Мой ответ сработал для вас?   -  person shea    schedule 06.10.2017
comment
@shea Не могли бы вы дать мне пример использования stringr и str_trim? Если вы можете ответить на вопрос: как правильно оценить персонажей на факторном уровне? Тогда да, это будет ответ. Например, когда я вызываю сводку (df), для фактора Y будет отображаться 4 уровня: бухгалтерский учет, финансы, банковское дело, технические. Когда я пытаюсь изменить имя уровня, он не регистрирует, что учетная запись является допустимой строкой, потому что на самом деле учетная запись выполняется с одним пробелом. Я выяснял это вручную, добавляя пробелы и проб и ошибок при попытке вырезать его.   -  person D500    schedule 06.10.2017
comment
Я опубликовал ответ, в котором показано, как загрузить 'stringr'. В ответе также есть инструкции по использованию str_trim. Вам не нужно измерять или считать пустое пространство, str_trim сделает это за вас и вырежет его. Вы можете посмотреть? Str_trim. Ответ находится под этими комментариями.   -  person shea    schedule 06.10.2017
comment
Я изучу какой-нибудь струнник. Спасибо за совет!   -  person D500    schedule 06.10.2017


Ответы (1)


Если "x" ваш dataframe

library(stringr)

x$industry <- as.character(x$industry)
x$industry <- str_trim(x$industry)
x$industry <- as.factor(x$industry)

Затем вы можете вернуться к fct_collapse(), чтобы упростить факторы.

person shea    schedule 05.10.2017