【问题标题】:How to create a dataframe whose name is stored in a vector如何创建名称存储在向量中的数据框
【发布时间】:2017-03-17 13:11:57
【问题描述】:

我必须每个月运行一个 R 脚本,它将一个 .csv 文件读入 数据框 并对其执行一些操作。

数据框的名称需要是动态的,例如: df_jan 表示 1 月df_feb 表示 2 月,依此类推

我使用 paste() 函数和 Sys.Date() 函数创建了一个包含所需数据框名称的字符向量

我想自动执行此代码,因此我不想每次运行此脚本时都重命名此数据框

现在,我如何将 .csv 读入此数据框。 目前我正在将文件加载到数据框 - 'df' 并使用 assign() 函数为其分配所需的名称,有没有更好的方法来完成一样吗?

谢谢

【问题讨论】:

  • 您可以在一次调用中完成所有操作,而不是先将 csv 读入 data.frame,然后再使用 assign。 IE。 assign("df_jan",read.csv(...))
  • 是的,但问题是这个数据框不存在,名称“df_jan”存储在使用 Sys.Date 和粘贴函数动态创建的向量中。我想将 .csv 文件读入一个数据框,其名称将根据当前月份每月更改
  • 不清楚为什么您认为需要更改代码中 data.frame 的名称。这使得很难提出更好的替代方案(因为您不需要这样做)。
  • @Roland 这是一个遗留代码,需要在整个代码中使用特定的数据帧名称,目前我们需要每月重命名读取 .csv 文件的数据帧,我正在尝试自动化这个过程
  • 这如何需要特定的 data.frame 名称? R 真的不在乎你如何命名你的对象。

标签: r dynamic dataframe naming read.csv


【解决方案1】:
create.df <- function(path){
        assign(paste0("df_", format(Sys.Date(), "%b")),
               read.csv(path),
               envir = .GlobalEnv
               )
}

然后使用您的.csv 的路径调用create.df

【讨论】:

  • 不要这样做。与其在全局环境中创建几个自动创建的动态命名的 data.frame,不如将它们放在一个列表中。
  • 我如何在代码中引用这些数据帧,例如在使用 colnames(df) 函数分配 colnames 时,我将在参数中传递什么?
  • @Vaibhav 如果你这样做,你会陷入地狱般的境地,你必须在任何地方都使用复杂的assignget 表达式,或者更好的选择是必须使用.GlobalEnv[[name]] 来引用物体。你为什么想要那个?
  • 是的,我认为使用常量数据框名称会更好,我可能需要花一些时间修改整个代码,但从长远来看会更好谢谢大家的帮助顺便说一句 .GlobalEnv[ [名称]] 做?
  • 您可以使用[[ 引用环境中的对象。见help("[["")
猜你喜欢
  • 2017-12-10
  • 2019-04-06
  • 2022-11-11
  • 2020-12-20
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多