Есть ли способ: текст в таблицу с R? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть строки с некоторым шаблоном.

например

>oc
[1]"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"

сырье - это таблица, и есть некоторые неприятные вещи, я решаю извлечь текст из таблицы и организовать, очистите их с помощью кода, затем измените форму таблицы.

Таблица исходных материалов выглядит следующим образом

     for financial company payment | manufacturer company payment | distributor people payment | other..
1 m..|            10                              20                             30                 ...
2 m..|            8                               14                             15                 ...
1 y..|            5                               9                              11                ...

Я ценю любой метод, поэтому, пожалуйста, оставьте любой комментарий к нему. Это было бы здорово помочь мне. Также я попытался сначала использовать функцию extract_text (в библиотеке tabilizer), а во-вторых, я использую регулярное выражение, чтобы привести строки в порядок, наконец, я использую функцию сканирования.

Опять же, любой метод в порядке. Пожалуйста, оставьте любую помощь. Спасибо!

1 Ответ

0 голосов
/ 09 апреля 2020

Вот решение - не элегантное, но работающее:

Ваши данные:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...