У меня есть фрейм данных с переменной, которая содержит количество пищи в разных единицах измерения. Фрейм данных содержит ~ 11000 наблюдений.
Позвольте мне привести пример: "10 г петерзеля ie, 7 грамм, 5 г круидена в 400 г бульона, 2 столовые ложки оливкового масла, 1 унция кетчупа, 20 сортов винограда, 1 gelbe Paprika "
Я нашел способ извлечь числа и суммировать их, используя эту функцию:
sum_numerics <- function(x) {
# Grab all numbers that appear
matches <- str_match_all(x, "[0-9]+")
# Grab the matches column in the list, transform to numeric, then sum
sapply(matches, function(y) sum(as.numeric(y)))
}
Я ищу способ извлечения всех количеств пищи, которые в граммах и запишите их в новую переменную, чтобы суммировать их на следующем шаге. Я трачу некоторое время на поиски способов сделать это и трачу некоторое время на решение проблемы с regex-demo , но я не могу найти работающее решение, и я действительно не могу понять, как написать работающее регулярные выражения-функция. Мне стыдно!
Пользователь "Макс Тефлон" предоставил возможное решение, которое после еще одного исследования выглядит следующим образом:
get_gramms <- function(x) {
# Grab all numbers that appear
str_extract_all(x, "([0-9]+\\s?([gG]|[gGrRaAmM]{5,6}|[gGrRaAmM]{2}))") %>% # any number followed by an optional space and a small/capital g%>%
unlist() %>%
str_remove_all('[[:alpha:]]') %>% # a vector is what we want
str_trim() %>% # remove all trailing whitespaces
as.numeric() # change to numbers
}
x %>%
mutate(var = map(var,~get_gramms(.))) %>%
mutate(var = map_dbl(var,~ifelse(length(.)>0,sum(.),NA)))
Я думаю, что его ответ близок к решению моей проблемы, но все равно возвращается неправильные значения, например, для «1 гель-паприка».
С нетерпением ждем новых идей, решений!