В настоящее время я работаю над проектом и пытаюсь классифицировать около ста тысяч строк на основе их содержания.
Цель этого кода состоит в том, чтобы определить, соответствует ли строка, классифицировать их в определенную группу, а затем сохранить конечный результат в CSV. Ни один код не содержит более одной подходящей строки.
Я понимаю, что после определенного момента мой код становится немного нечитаемым - в основном потому, что если мне нужно изменить одну из, скажем, двухсот функций str_detect с тем же форматом, я должен найти его в своем case_when и т. Д.
Я ищу способ интеграции циклов и условных выражений в мою функцию для улучшения читабельности и облегчения изменения функций str_detect.
Я попытался обменять комбинацию case_when / str_detect, определив тиббл, включающий все мои классы строк, строковые термины и классификации. После этого я заменил case_when для цикла for, который интегрирует tibble в str_detect, вытаскивая определенное условие строки каждый ход.
# Working case_when version
library(dplyr)
library(stringr)
a.str <- "(?i)Apple"
b.str <- "(?i)Banana"
c.str <- "(?i)Corn"
food_set <- read_csv("Food.csv")
food_identified <- food_set %>% mutate(
food.type = case_when(
str_detect(food_set, a.str ) = TRUE ~ "A",
str_detect(food_set, b.str ) = TRUE ~ "B",
str_detect(food_set, c.str ) = TRUE ~ "C"
)
)
food_classified <- write_csv(food_identified,"Food_Classified.csv")
# Failing for loop version
library(dplyr)
library(stringr)
str_options <- tribble(
~variety.str, ~String, ~Classification,
#-----------/-------------/-------------------
"a.str" , "(i?)Apple" , "A",
"b.str" , "(i?)Banana", "B",
"c.str" , "(i?)Corn" , "C"
)
food_set <- read_csv("Food.csv")
food_identified <- food_set %>% mutate(
for (k in 1:3) {
if(str_detect(food_set, str_options[k,2]) == TRUE) {
food.type = str_options[k,3]
}
break
}
)
food_classified <- write_csv(food_identified,"Food_Classified.csv")
Код case_when работает нормально - он выплевывает таблицу с двумя столбцами (food, food_type).
Цикл for не работает - он выдает ошибку, в которой говорится, что «нет применимого метода для типа», примененного к объекту класса «c (« tbl_df »,« tbl »,« data.frame »)».
Кто-нибудь имеет представление о том, как я мог бы заставить это работать?