【发布时间】:2020-01-21 13:05:36
【问题描述】:
我有一个包含不同列的数据框,尤其是“commodity_name”列。该栏目列出了不同的商品,如“wti”、“brent”、“wheat”、“cbot wheat”等。
我想以某种方式“过滤”列并将名称分组。因此,应该用“集团石油”代替“wti”和“布伦特”。我也可以将它放在额外的专栏中。 背景信息:我想对名称进行分组,然后将其与 dummies 库“dummy”。
到目前为止,我已经测试了不同的方法,但都没有成功。我现在的想法如下。 设置要包含在“石油”组中的商品清单
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 商品(本例中为oil),replace = groupe name 替换商品名称(本例中为“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)
}
最后,我在我的数据框列(“commodity_name”)上使用了带有 lapply 的 grouper 函数
df_coded$commodity_name <- lapply(df_coded$commodity_name, function(x){grouper(df_coded$commodity_name, oil, "goil")})
现在我的整个程序都卡住了。 必须有一个更简单/更好的方法来解决这个问题。 提前感谢您的帮助!
【问题讨论】:
-
这里有 1 个问题...看看您的
lapply...您说的是lapply(..., function(x)...),但您从不使用x。你的意思是说lapply(df_coded$commodity_name, function(x){grouper(x, oil, "goil")})? -
也许只是
df_coded$commodity_name <- ifelse(df_coded$commodity_name %in% c("brent", "gasoline", etc), "goil", commodity_name)? -
@zx8754 df_coded$commodity_name