【问题标题】:Change column names for multiple data frames in a loop在循环中更改多个数据框的列名
【发布时间】:2021-02-19 11:59:36
【问题描述】:

我有四个数据框,用于四个不同的河流数据集(河流是 Main、Danube、Isar 和 Inn)。数据框的维度相同,命名如下:“df_Main”、“df_Danube”、“df_Isar”和“df_Inn”。 为了以后方便绘图,我需要所有数据框都具有相同的列名。 我认为可以通过以下方式轻松实现:

rivers <- c("Main", "Danube", "Isar", "Inn")
for (i in 1:length(rivers)) {
  colnames(get(paste0("df_", rivers[i]))) <- c("bla", "bla", "bla", "bla")
}

但这不起作用。 有人有想法吗?

【问题讨论】:

  • 虽然我不清楚你的问题,但我认为你需要setNames
  • 感谢您的快速回复。你能举个例子吗?

标签: r


【解决方案1】:

如果你想这样做,你可能需要函数assign。举个例子:

rivers <- c("df_Main", "df_Danube", "df_Isar", "df_Inn")

for (i in rivers) {
  x=get(i)
  colnames(x) <- c("bla", "bla", "bla", "bla")
  assign(i,x)
}

如果您需要为超过 4 个 data.frames 执行此操作,您应该检查应用函数。

不过,如果您打算通过 ggplot2 绘制它,将它放在单个 df 中可能会更有用。

【讨论】:

    【解决方案2】:

    伪代码

    library(purrr) # using purrr for map function
    # create a list of 4 data frame
    # another alternatives is define the initial list with names
    list_4_river_df <- list(df_Main = df_Main, df_Danube = df_Danube,
                            df_Isar = df_Isar, df_Inn = df_Inn)
    # map setNames to each dataframe in the list
    list_4_river_df <- map(list_4_river_df, setNames, nm = c("bla_1", "bla_2", "bla_3", "bla_4", "bla_5"))
    
    # then list2env should work perfectly
    list2env(list_4_river_df,envir = .GlobalEnv)
    

    【讨论】:

    • 感谢这基本上适用于创建的列表。但是当我尝试通过list2env(list_4_river_df,envir = .GlobalEnv) 从列表中检索数据帧时,我收到以下错误:names(x) must be a character vector of the same length as x
    • 只需更新答案以包含 list2env 用例
    • 嗯,命令list2env 不再创建错误消息,但是当我之后查看单个数据帧时,它们仍然具有旧的列名。 :(
    • 您好,我与您分享的代码只是显示结果 - 您需要将它们放在一起才能使其工作。 - 我调整了答案
    • 太棒了,现在它完美地完成了这项工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2019-08-20
    相关资源
    最近更新 更多