我有一个带有不同列的数据框,尤其是一个“ 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")})
现在我的整个程序陷入了困境。必须有一个更简单/更好的方法来解决此问题。预先感谢您的帮助!
不需要循环,也许很简单:
df_coded$commodity_name <- ifelse(df_coded$commodity_name %in% c("brent", "gasoline", etc),
"goil", commodity_name)