Вот решение - не элегантное, но работающее:
Ваши данные:
oc <- "for financial company payment manufacturer company payment distributor people payment other payment total payment 1 month payment 10 20 30 40 100 2 month payment 8 14 15 30 67 1 year payment 5 9 11 15 40"
Сначала разбейте строку на payment
:
oc <- strsplit(oc, " payment ")
Подготовьте матрицу для заполнения данных:
mt <- matrix(NA, ncol = 5, nrow = 3)
Извлеките соответствующие элементы из oc
в качестве имен столбцов:
colnames(mt) <- oc[[1]][1:5]
Определите имена строк:
rownames(mt) <- c("1 month", "2 month", "1 year")
Возьмите цифры от oc
:
numbers <- ocx[[1]][7:9]
Очистите numbers
:
numbers <- gsub("( 2 month| 1 year)", "", numbers)
Теперь разбейте numbers
на отдельные номера, используя str_extract_all
из пакета stringr
:
library(stringr)
numbers <- str_extract_all(numbers, "\\d+")
Перебирать строки в mt
, чтобы заполнить числа из numbers
:
for(i in 1:nrow(mt)){
mt[i,] <- numbers[[i]]
}
Наконец переопределить mt
как фрейм данных:
mt <- as.data.frame(mt)
Et voilá, результат:
mt
for financial company manufacturer company distributor people other total
1 month 10 20 30 40 100
2 month 8 14 15 30 67
1 year 5 9 11 15 40