在R中使用数组,使用来自多个源的read.csv读取数据

时间:2014-06-26 07:53:20

标签: r

所以我正在尝试将多个csv文件加载到一个项目中并且认为我可以使用一个数组,比如data_in,用于所有我的csv文件,所以我可以用引用它们来引用它们

data_in[,,1] ##first csv file
data_in[1,,2] ## first row of second csv file

等等。要读取文件,我有这个循环。

for (i in seq_along(names)) {
    file_name <- paste(names[i],".csv", sep = "")
    data_in[,,i] <- read.csv(file_name, header=T, sep= ",")
    }

但显然我不会在这里,如果它奏效了。我不习惯R所以在加载数据之前需要声明data_in的维度吗?有没有办法通过仅使用csv文件的索引来读取数据,还是必须使用3D数组?对不起,如果这是基本的。

非常感谢任何帮助。祝你今天愉快。

2 个答案:

答案 0 :(得分:1)

扩大休的评论。您希望list.files()lapply将所有文件作为data.frames列表读取,然后您可以使用[[]]

进行访问
files <- list.files(pattern="csv")
data_in <- lapply(files, read.csv)

read.csv只是read.table,默认为header = T和sep =“,”,因此您无需指定它们。

然后使用[[]]例如

来访问它们
head(data_in[[1]])

答案 1 :(得分:1)

如果你真的想要一个数组,虽然我会建议lapply除了我以外没有其他原因(任何可能的数组都更适合) )matrices),这是一种方法

set.seed(357)
# note that these are actually matrices
df1 <- matrix(sample(1:100, 9), ncol = 3)
df2 <- matrix(sample(1:100, 9), ncol = 3)
df3 <- matrix(sample(1:100, 9), ncol = 3)

my.df <- list(df1, df2, df3) # this is what you get with list.files/lapply approach
my.df

out.array <- array(rep(NA, 3*3*3), dim = c(3, 3, 3))
out.array

for (i in 1:3) {
  out.array[,, i] <- my.df[[i]]
}
out.array

, , 1

     [,1] [,2] [,3]
[1,]   11   22   88
[2,]    6   63   70
[3,]   28   45   72

, , 2

     [,1] [,2] [,3]
[1,]  100   45   17
[2,]   62   22   30
[3,]   52   57   83

, , 3

     [,1] [,2] [,3]
[1,]   69   45   67
[2,]   43   36   65
[3,]   18    5   35