Как преобразовать вектор строк в Заголовок
У меня есть вектор строк в нижнем регистре. Я'Я хотел бы изменить их на регистр заголовка, означая, что первая буква каждого слова будет заглавной. Я'нам удалось сделать это с двойной петлей, но яя надеюсь на этоболее эффективный и элегантный способ сделать это, возможно,gsub
и регулярное выражение.
Вот's некоторые примеры данных, а также работающий двойной цикл, а также другие вещи, которые я пробовалт работа.
strings = c("first phrase", "another phrase to convert",
"and here's another one", "last-one")
# For each string in the strings vector, find the position of each
# instance of a space followed by a letter
matches = gregexpr("\\b[a-z]+", strings)
# For each string in the strings vector, convert the first letter
# of each word to upper case
for (i in 1:length(strings)) {
# Extract the position of each regex match for the string in row i
# of the strings vector.
match.positions = matches[[i]][1:length(matches[[i]])]
# Convert the letter in each match position to upper case
for (j in 1:length(match.positions)) {
substr(strings[i], match.positions[j], match.positions[j]) =
toupper(substr(strings[i], match.positions[j], match.positions[j]))
}
}
Это сработало, но кажется чрезмерно сложным. Я прибег к этому только после неудачного эксперимента с более простыми подходами. Вот некоторые из вещей, которые я пробовал, а также вывод:
# Google search suggested \\U might work, but evidently not in R
gsub("(\\b[a-z]+)", "\\U\\1" ,strings)
[1] "Ufirst Uphrase" "Uanother Uphrase Uto Uconvert"
[3] "Uand Uhere'Us Uanother Uone" "Ulast-Uone"
# I tried this on a lark, but to no avail
gsub("(\\b[a-z]+)", toupper("\\1"), strings)
[1] "first phrase" "another phrase to convert"
[3] "and here's another one" "last-one"
Регулярное выражение фиксирует правильные позиции в каждой строке, как показано вызовомgregexpr
, но строка замены явно работает не так, как хотелось бы.
Если ты можешь'Я уже сказал,Я относительно новичок в регулярных выражениях и был бы признателен за помощь в том, как заставить замену работать правильно. Я'Я также хотел бы узнать, как структурировать регулярное выражение, чтобы избежать захвата буквы после апострофа, так как я неЯ не хочу менять регистр этих букв.