Пользовательская очистка вектора строк с помощью janitor::make_clean_names()

#r #string #janitor

#r #строка #уборщик

Вопрос:

У меня есть вектор, который содержит имена столбцов фрейма данных. Я хочу очистить эти строки.

 vec_of_names <- c("FIRST_column", 
                  "another-column", 
                  "ALLCAPS-column", 
                  "cOLumn-with___specialsuffix", 
                  "blah#4-column",
                  "ANOTHER_EXAMPLE___specialsuffix",
                  "THIS_IS-Misleading_specialsuffix")
 

Я специально хочу использовать janitor::make_clean_names() для этой очистки.

 janitor::make_clean_names(vec_of_names)

[1] "first_column"                     "another_column"                  
[3] "allcaps_column"                   "c_o_lumn_with_specialsuffix"     
[5] "blah_number_4_column"             "another_example_specialsuffix"   
[7] "this_is_misleading_specialsuffix"
 

Тем не менее, я хочу применить следующее правило:

  1. Когда строка заканчивается ___specialsuffix (т.е. 3 символа подчеркивания и «specialsuffix»),
    • очистите janitor::make_clean_names() только ту часть, которая была ДО ___specialsuffix
      (имеется в виду значение, возвращаемое из strsplit(x, "___specialsuffix") ).
    • затем сохраните вставленную обратно очищенную строку ___specialsuffix .
  2. В противном случае, если строка не заканчивается на ___specialsuffix , регулярно очищайте ее, используя janitor::make_clean_names() по всей строке.

Следовательно, желаемый результат будет:

 [1] "first_column"                     "another_column"                  
[3] "allcaps_column"                   "c_o_lumn_with___specialsuffix"     ## elements [4] and [6]
[5] "blah_number_4_column"             "another_example___specialsuffix"   ## were handled according to rule #1
[7] "this_is_misleading_specialsuffix"                                     ## outlined above
 

Большое спасибо за любую идею!

Комментарии:

1. Достигает ли ответ того, что вам нужно? Не стесняйтесь отмечать ответ как принятый.

2. только что закончил проверку его работы. Спасибо!

Ответ №1:

 vec_of_names <- c("FIRST_column", 
                  "another-column", 
                  "ALLCAPS-column", 
                  "cOLumn-with___specialsuffix", 
                  "blah#4-column",
                  "ANOTHER_EXAMPLE___specialsuffix",
                  "THIS_IS-Misleading_specialsuffix")


library(tidyverse)

suffix <- vec_of_names %>% str_extract(pattern = "___specialsuffix$") %>% replace_na("")
cleaned_without_suffix <- vec_of_names %>% str_remove("___specialsuffix$") %>% janitor::make_clean_names()


output <- paste0(cleaned_without_suffix, suffix)