У вас есть несколько проблем, которые вам нужно решить, чтобы сделать это.
- разбиение текста на столбцы
- объединение пар строк
- объединение списков
Если вы собираетесь сделать это только один раз, вероятно, было бы проще скопировать ваши данные в Excel, отформатировать их там, а затем загрузить в R. Но если вы намерены использовать R, то мы необходимо проработать каждый из них в следующем порядке:
1) Текст в столбцы
strsplit(string, " ")
разбит текстовые строки на пробелы. strsplit(string, "[[:space:]]+")
будет разбит на пробел, рассматривая последовательный пробел как один сплит. Однако вы хотите избежать разделения «Переменная 1» на «Переменная» и «1», а также «Северная Дакота» на «Северная» и «Дакота»
Быстрое решение здесь - gsub("North ", "North_", string)
, которое превратится в «Северная Дакота» в «Северная Дакота», поэтому два слова остаются вместе, когда вы применяете strsplit
.
2) Объединение пар строк
Вы можете использовать модуль для извлечения каждой второй записи вектор: 1:4 %% 2
вернет c(1,0,1,0)
. Это можно использовать для извлечения каждого второго значения следующим образом: vec[1:4 %% 2 == 1]
.
Комбинируя их попарно, вы получите что-то вроде следующего:
vec = c('a', 'b', 'c', 'd')
paste(vec[1:4 %% 2 == 1], vec[1:4 %% 2 == 0])
3) Объединение списков
Самое простое решение здесь, вероятно, unlist
. Но вы также можете использовать функцию reduce
в пакете purrr
.
Объединение всего этого
data = unlist(data)
data = trimws(data)
nn = length(data)
data = paste(data[1:nn %% 2 == 1], data[1:nn %% 2 == 0])
# add other rules here for state names that are two words
data = gsub("ariable ", "ariable_", data)
data = gsub("North ", "North_", data)
data %>%
strsplit("[[:space:]]+") %>%
purrr::reduce(rbind) %>%
as.data.frame()