所以我正在尝试将多个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数组?对不起,如果这是基本的。
非常感谢任何帮助。祝你今天愉快。
答案 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