【问题标题】:How to name dataframe in for loop如何在for循环中命名数据框
【发布时间】:2020-10-05 02:57:46
【问题描述】:

我正在尝试调用一个数据框,但它以数字命名,因为它最初是多个。我想重命名循环中的数据框,或者找到一种方法来调用我的数据框,即使它的标题是数字。现在,在我运行这段代码之后:

filenames <- list.files(path = "filepath",pattern = ".*txt")
head(filenames)

names <- substr(filenames,1,22)

for(i in names){
  filepath <-file.path("filepath",paste(i,".txt",sep = ""))
  assign(i,read.delim(filepath,colClasses = c('character','character','factor','factor'),sep = "\t"))
  }

我得到了很多单独的数据框,其名称类似于“101_1b1_Al_sc_Meditron.txt”。当我尝试查看数据框时,R 感到困惑,因为名称以数字开头。

这里有什么好的解决办法吗?

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    最简单的解决方案是使用反引号引用原始名称。

    示例:

    `123_mtcars` <- mtcars
    View(`123_mtcars`)
    

    如果您希望创建命名约定或只是从每个数据框名称中删除数字,您可以在循环中执行此操作并在分配语句中使用新变量。

    示例:

    filenames <- list.files(path = "filepath",pattern = ".*txt")
    head(filenames)
    
    names <- substr(filenames,1,22)
    
    for(i in names){
        filepath <-file.path("filepath",paste(i,".txt",sep = ""))
        
        # gsub to replace all numbers with "" for the name i
        dfName <- gsub("[0-9]", "", i)
        
        assign(dfName,read.delim(filepath,colClasses = c('character','character','factor','factor'),sep = "\t"))
    }
    

    【讨论】:

      【解决方案2】:

      这是我能想到的 3 个解决方案:

      1.使您的代码保持当前状态。

      如果我们不更改您的代码的任何内容并且您的数据框被命名为'101_1b1_Al_sc_Meditron' 以查看数据框的内容,您可以使用反引号。尝试像这样使用它:

      `101_1b1_Al_sc_Meditron`
      

      2。更改数据框的名称。

      在您的循环中将assign 行更改为

      assign(paste0('df_', i), read.delim(filepath,
             colClasses = c('character','character','factor','factor'),sep = "\t"))
      

      所以在运行for 循环后,您将拥有df_101_1b1_Al_sc_Meditron 的文件名,这是一个标准名称,您可以毫无问题地访问它们。

      3.将数据存储在列表中。

      与其在全球环境中拥有如此多的数据框,不如将它们存储在一个列表中。列表更易于管理。

      list_of_files <-lapply(filepath, function(x) read.delim(x, 
            colClasses = c('character','character','factor','factor'),sep = "\t"))
      

      【讨论】:

        猜你喜欢
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        • 2017-08-16
        • 2021-03-31
        • 1970-01-01
        相关资源
        最近更新 更多