【问题标题】:R: arbitrarily naming filesR:任意命名文件
【发布时间】:2021-04-15 04:28:47
【问题描述】:

我正在使用 R 编程语言。在上一个问题 (R: Importing Entire Folder of Files) 中,我学习了如何从给定文件夹中导入所有文件并按“顺序”命名它们:

#Get the path of filenames
filenames <- list.files("C:/Users/Documents/files_i_want", full.names = TRUE)
#Read them in a list
list_data <- lapply(filenames, read.table)
#Name them as per your choice (df_1, df_2 etc)
names(list_data) <- paste('df', seq_along(filenames), sep = '_')
#Create objects in global environment.
list2env(list_data, .GlobalEnv)

这会从该文件夹中导入所有文件并将它们命名为“df_1”、“df_2”、“df_3”等。看起来“seq_along”语句添加了“1”、“2”、“3” " 用于这些文件中的每一个。

是否有更改“seq_along”语句以使其以不同的数字开头?第一个文件可以命名为“df_100”,后跟“df_101”、“df_102”……还是“df_a1、df_a2”、df_a3?

我问这个的原因:假设我现在有两个不同文件夹(“files_i_want_a”,“files_i_want_b”)中的文件,我想导入 R。我可以修改答案如下:

   #first folder

 filenames <- list.files("C:/Users/Documents/files_i_want_a", full.names = TRUE)
    #Read them in a list
    list_data <- lapply(filenames, read.table)
   
    names(list_data) <- paste('dfa', seq_along(filenames), sep = '_')
    #Create objects in global environment.
    list2env(list_data, .GlobalEnv)

    #second folder
    filenames <- list.files("C:/Users/Documents/files_i_want_b", full.names = TRUE)
    #Read them in a list
    list_data <- lapply(filenames, read.table)
  
    names(list_data) <- paste('dfb', seq_along(filenames), sep = '_')
    #Create objects in global environment.
    list2env(list_data, .GlobalEnv)

是否有更有效的方法将所有这些导入的文件合并到一个文件中?

例如new_file = rbind(dfa_1, dfa_2, dfa_3, dfb_1, dfb_2, dfb_3)

如果这些文件没有通过写 paste('dfb', seq_along(filenames), sep = '_')paste('dfa', seq_along(filenames), sep = '_') 来命名,那么每次引入新文件时,它们都会被覆盖并删除。

有没有直接命令可以自动“rbind”所有已经导入本地环境的文件,并将它们分配给一些新的对象,例如“new_file”?

【问题讨论】:

  • 感觉你在这里问了两个问题。

标签: r import rename


【解决方案1】:

在这种情况下不需要seq_along - 它是一个辅助函数,可以防止零长度向量在循环中崩溃。自从

  1. 您不在 for 循环中
  2. paste 接受矢量化输入

你可以这样做

names(list_data) &lt;- paste('dfa', filenames, sep = '_')

如果你想添加新数字,你可以这样做:

fileNumSuffix <- ( 1:length(filenames) ) + 100

names(list_data) <- paste('dfa', filenames, fileNumSuffix, sep = '_')

【讨论】:

    【解决方案2】:

    如果您想从所有文件中创建一个组合数据框,则无需创建单独的数据框对象。

    all_dirs <- dir('Temp/', 'files_i_want', full.names = TRUE)
    
    new_file <- do.call(rbind, lapply(unlist(lapply(all_dirs, 
                        list.files, full.names = TRUE)), read.table))
    

    【讨论】:

      猜你喜欢
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 2018-08-30
      • 2018-01-13
      • 2017-10-25
      相关资源
      最近更新 更多