Разделение и объединение
Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 3 из 64.
strsplit(x, split) разрезает строку по каждому разделителю. Она возвращает список с одним вектором символов для каждой входной строки, поэтому используйте [[1]], чтобы получить части одной строки.
csv <- "red,green,blue"
parts <- strsplit(csv, ",")[[1]]
print(parts)
print(length(parts))Вывод:
[1] "red" "green" "blue"
[1] 3paste() работает наоборот. С помощью collapse она объединяет элементы одного вектора в одну строку, помещая между ними текст collapse. sep помещается между аргументами, элемент за элементом.
words <- c("one", "two", "three")
print(paste(words, collapse = "-"))
print(paste(words, 1:3, sep = "_"))Вывод:
[1] "one-two-three"
[1] "one_1" "two_2" "three_3"Текст из входных данных часто содержит пробелы вокруг разделителей. trimws() удаляет пробелы в начале и конце каждого элемента:
raw <- " apples , pears,plums "
items <- trimws(strsplit(raw, ",")[[1]])
print(items)
print(paste(rev(items), collapse = " | "))Результат:
[1] "apples" "pears" "plums"
[1] "plums | pears | apples"strsplit() для вектора возвращает по одному элементу списка для каждой строки, поэтому каждая входная строка сохраняет свои фрагменты:
lines <- c("a,b", "c,d,e")
parts <- strsplit(lines, ",")
print(length(parts))
print(parts[[2]])Вывод:
[1] 2
[1] "c" "d" "e"Задание
ЛегкоЗавершите hashtags(line). В строке содержатся теги, разделённые запятыми, возможно, с пробелами вокруг них. Верните одну строку, в которой перед каждым тегом стоит #, а теги разделены одиночными пробелами: r, data ,stats превращается в #r #data #stats.
Предоставленный код считывает строку и выводит возвращённое значение.
Попробуйте сами
hashtags <- function(line) {
# Напишите свой код здесь
line
}
# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
cat(hashtags(input[1]), sep = "\n")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки углублённо
Подстроки с substr()Форматирование с sprintf()Разделение и объединениеПоиск в строкахЗамена текстаПовторение — создание имени пользователя4Матрицы
Создание матрицИндексация матрицСводные данные по строкам и столбцамАрифметика матрицПовторение — схема рассадки7Семейство Apply
lapply и sapplyMap и mapplyFilter и FindReduceПовторение — конвейер обработки данных10Продвинутые конструкции управления
Функция switch()Векторизованный ifelse()repeat и breakРекурсивные функцииПовторение — классификатор оценок2Поиск по ключам и значениям
Поиск в именованных векторахПроверка ключейДобавление и удаление ключейПеребор имёнПовторение — биржа акций5Проект — Журнал оценок
Добавление учениковВыставление оценок3Множества и подсчёт
Уникальные значенияОперации с множествамиПроверка принадлежностиПодсчёт с помощью table()Повторение — гости мероприятия6Функции как значения
Анонимные функцииПередача функцийВозврат функцийЗамыкания с состояниемПовторение — правила скидок9Таблицы данных
Создание таблиц данныхСтолбцы и строкиФильтрация строкДобавление и сортировкаПовторение — отчёт о продажах12Проект — Трекер расходов
Запись расходовОбщие расходыПотренируйтесь самостоятельно: Онлайн-компилятор R