Вычтите число и сумму из свободного ввода текста, добавьте к df - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть датафрейм с колонкой, в которой есть свободные текстовые записи о годах образования. Из записей свободного текста я хочу извлечь все числа и суммировать их.

Пример: data_en $ educationTxt [1] дает "6 начальной школы 10 старших классов"

С помощью следующего кода я могу извлечь оба числа и суммировать их.

library(stringr)
x <- as.numeric(str_extract_all(data_en$education[1], "[0-9A]+")[[1]])
x <- as.vector(x)
x <- sum(x)

Однако в идеале я хотел бы сделать это для всех записей свободного текста (то есть для каждой строки) и впоследствии добавить результаты в кадр данных для каждой строки (то есть в переменную, такую ​​как data_en $ educationNum). Я немного застрял в том, как действовать.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Вы можете использовать sapply:

data_en$educationNum <- sapply(str_extract_all(data_en$education, "[0-9]+"), 
       function(i) sum(as.numeric(i)))

data_en
#                        education educationNum
# 1 6 primary school 10 highschool           16
# 2 10 primary school 2 highschool           12
# 3                      no school            0

Данные

data_en <- data.frame(education = c("6 primary school 10 highschool",
                      "10 primary school 2 highschool",
                      "no school"))
1 голос
/ 03 апреля 2020

Вам просто нужно map на выходе str_extract_all

x <- c('300 primary 1 underworld', '6 secondary 9 dungeon lab')

library(purrr)
map_dbl(str_extract_all(x, '\\d+'), ~ sum(as.numeric(.)))

# [1] 301  15
...