使用lapply和gsub处理数据帧

问题描述 投票:0回答:1

我有一个带有不同列的数据框,尤其是一个“ commodity_name”列。在此列中列出了不同的商品,例如“ wti”,“ brent”,“ wheat”,“ cbot Wheat”等。

我想以某种方式“过滤”该列并将名称分组。因此,应该使用“组油”代替“ wti”和“ brent”。我也可以在额外的专栏中对此进行介绍。背景信息:我想对名称进行分组,然后与虚拟实体库进行“虚拟”分组。

到目前为止,我已经测试了不同的方法,但是都没有解决。我的想法现在有以下几点。设置要包含在“石油”组中的商品列表]

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

设置函数以准备要与gsub一起使用的名称。 df =数据框(在这种情况下为“ df_coded”),findlist =我的上市商品(在这种情况下为油),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)
}

最后,我在dataframe列(“ commodity_name”)上对lapply使用了grouper函数

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

现在我的整个程序陷入了困境。必须有一个更简单/更好的方法来解决此问题。预先感谢您的帮助!

r dataframe lapply gsub
1个回答
0
投票

不需要循环,也许很简单:

df_coded$commodity_name <- ifelse(df_coded$commodity_name %in% c("brent", "gasoline", etc),
                                  "goil", commodity_name)
© www.soinside.com 2019 - 2024. All rights reserved.