【问题标题】:Process dataframe with lapply and gsub使用 lapply 和 gsub 处理数据帧
【发布时间】: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 &lt;- ifelse(df_coded$commodity_name %in% c("brent", "gasoline", etc), "goil", commodity_name) ?
  • @zx8754 df_coded$commodity_name

标签: r dataframe lapply gsub


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多