#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"
Тем не менее, я хочу применить следующее правило:
- Когда строка заканчивается
___specialsuffix
(т.е. 3 символа подчеркивания и «specialsuffix»),- очистите
janitor::make_clean_names()
только ту часть, которая была ДО___specialsuffix
(имеется в виду значение, возвращаемое изstrsplit(x, "___specialsuffix")
). - затем сохраните вставленную обратно очищенную строку
___specialsuffix
.
- очистите
- В противном случае, если строка не заканчивается на
___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)