Могу ли я использовать вектор символов с recode () и mutate ()

У меня есть таблица, как показано ниже:

   # A tibble: 6 x 8
  projectRcn projectID projectAcronym role        id name   shortName activityType
       <int>     <int> <chr>          <chr>    <int> <chr>  <chr>     <chr>       
1     208327    741617 PROSME-INN     parti~  9.44e8 INSTI~ INMA Buc~ PUB         
2     208327    741617 PROSME-INN     parti~  9.39e8 CAMER~ CCIPH     OTH         
3     208327    741617 PROSME-INN     parti~ 10.00e8 FUNDA~ CRIMM     OTH         
4     208327    741617 PROSME-INN     coord~  9.41e8 AGENT~ ADRSM     OTH         
5     208327    741617 PROSME-INN     parti~  9.41e8 SC IN~ SC INPUL~ PRC         
6     208327    741617 PROSME-INN     parti~  9.54e8 AGENT~ ADRBI     PUB 

Я могу использовать recode () с mutate (), чтобы добавить дополнительный столбец на основе $ activityType, называемый $ orgType, используя приведенный ниже код:

h2020orgs <- mutate(h2020orgs,
                    orgType = recode(activityType,
                          HES = "Higher/Secondary Education Establishment",
                          OTH = "Other",
                          PRC = "Private/For-profit entity",
                          PUB = "Public body",
                          REC = "Research Organisation"))

Есть ли способ заменить список, начинающийся с "HES =" Высшее / среднее учебное заведение "" одним вектором после "activityType,"?

Я попытался определить вектор символов ...

cordisActivityTypes <- c(HES = "Higher/Secondary Education Establishment",
                         OTH = "Other",
                         PRC = "Private/For-profit entity",
                         PUB = "Public body",
                         REC = "Research Organisation")

... а затем используя это вместо индивидуально напечатанных символьных строк:

h2020orgs <- mutate(h2020orgs,
                    orgType = recode(activityType,
                                     as.character(cordisActivityTypes)))

это вызывает следующую ошибку:

Error in mutate_impl(.data, dots) : 
  Evaluation error: Argument 2 must be named, not unnamed.

Я пытаюсь перестроить свое использование перекодирования в mutate? Можете ли вы предложить альтернативу вводу каждой отдельной инструкции в коде? Когда дело доходит до перекодирования с множеством отдельных инструкций, код становится очень длинным и громоздким!


person geoffest    schedule 08.06.2018    source источник
comment
Приведите небольшой воспроизводимый пример с dput   -  person akrun    schedule 08.06.2018
comment
Привет @akrun, надеюсь, эта уменьшенная голова () моего планшета в порядке? Я все еще не уверен, как правильно использовать dput ()   -  person geoffest    schedule 11.06.2018


Ответы (1)


Вместо создания вектора используйте list

cordisActivityTypes <- list(HES = "Higher/Secondary Education Establishment",
                     OTH = "Other",
                     PRC = "Private/For-profit entity",
                     PUB = "Public body",
                     REC = "Research Organisation")

а затем выполните оценку с помощью !!!

h2020orgs %>%
             mutate(orgType = recode(activityType, !!! cordisActivityTypes))
person akrun    schedule 08.06.2018
comment
Это отлично сработало @akrun, спасибо. В интересах обучения, можете ли вы объяснить, почему нам нужно использовать '!!!'? Я не встречал этого метода нигде в литературе или стеке. - person geoffest; 11.06.2018
comment
@geofffest Это оператор типа bang bang bang, используемый для оценки, когда существует несколько наборов выражений в зависимости от параметров, которые принимает функция. Дополнительную информацию можно найти здесь. - person akrun; 11.06.2018