【问题标题】:How to call several variables in a for loop in R?如何在 R 的 for 循环中调用多个变量?
【发布时间】:2018-06-11 13:44:27
【问题描述】:

我有几个 .csv 数据文件存储在一个目录中,我需要将它们全部导入 R。

每个 .csv 在导入 R 时都有两列。但是,第 1001 行需要存储为每个 .csv 文件的单独变量(它对应于在模拟期间存储在这里的预期值;我希望它在主要数据之外)。

到目前为止,我有以下代码可以将我的 .csv 文件导入为矩阵。

#Load all .csv in directory into list
dataFiles <- list.files(pattern="*.csv")

for(i in dataFiles) {
   #read all of the csv files
   name <- gsub("-",".",i)
   name <- gsub(".csv","",name)  
   i <- paste(".\\",i,sep="")
   assign(name,read.csv(i, header=T))
}

这会产生几个具有命名约定“sim_data_L_mu”的矩阵,其中 L 和 mu 是来自仿真的参数。如何从每个矩阵中删除第 1001 行(第一列有数字,第二列为空)并将其存储为名为“sim_data_L_mu_EV”的变量?我的主要问题是我不知道如何在我的 for 循环中调用所有新创建的矩阵。

【问题讨论】:

标签: r variables for-loop


【解决方案1】:

无法在 cmets 中发布长代码,所以在这里写:

# Use dialog to select folder
# Full names are required to access files that are not in the current working directory 
file_list <- list.files(path = choose.dir(), pattern = "*.csv", full.names = T)
big_list <- lapply(file_list, function(z){
  df <- read.csv(z)
  scalar <- df[1000,1]
  return(list(df, scalar))
})

要访问第三个文件中的标量值,您可以使用

big_list[[3]][2]

big_list 中的元素遵循file_list 的顺序,因此您始终知道数据来自哪个文件。

如果您使用data.table::fread() 而不是read.csv,您可以尝试分配列名、选择要读取的行/列等。对于大型数据文件,它也相当快。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 2016-01-18
    • 2021-04-23
    • 2018-04-28
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多