Обрабатывать фрейм данных с помощью lapply и gsub - PullRequest
1 голос
/ 21 января 2020

У меня есть датафрейм с разными столбцами и особенно столбец "имя_продукта". В этом столбце перечислены различные товары, такие как "wti", "brent", "пшеница", "пшеница cbot" и др. c.

Каким-то образом я хочу "отфильтровать" столбец и сгруппировать имена , Таким образом, вместо «wti» и «brent» должно быть «group oil». Это также хорошо для меня, чтобы иметь это в дополнительной колонке. Справочная информация: я хочу сгруппировать имена, а затем «пустышку» с библиотекой манекенов.

До сих пор я тестировал разные подходы, но ни один из них не сработал. Моя идея сейчас заключается в следующем. Настройка списка товаров для включения в группу «масло»

oil <- list("brent", "gasoline", "heating oil", "nymex heating oil", "nymex wti", "rbob gasoline",  "crude oil", "wti", "unleaded gas", "wti")

Настройка функции для подготовки имен для использования с gsub. df = dataframe (в данном случае "df_coded"), findlist = my liste co товаров (в данном случае нефть), replace = имя группы для замены названия товара (в данном случае "goil").

grouper <- function(df, findlist, replace){
  string <- df
  find.list <- findlist
  find.string <- paste(unlist(find.list), collapse ="|")

  df <- gsub(find.string, replacement = replace, x = string)
}

Наконец, я использовал функцию grouper с lapply для моего столбца данных («имя_продукта»)

df_coded$commodity_name <- lapply(df_coded$commodity_name, function(x){grouper(df_coded$commodity_name, oil, "goil")})

Теперь вся моя программа зависает. Должен быть более простой / лучший способ решения этой проблемы. Заранее благодарю за помощь!

1 Ответ

0 голосов
/ 21 января 2020

Нет необходимости в петлях, может быть просто:

oil <- c("wti", "brent", "etc.")

df_coded$commodity_name <- ifelse(df_coded$commodity_name %in% oil),
                                  "goil", df_coded$commodity_name)
...