使用R将数据添加到三维阵列
我在MATLAB中有一系列的函数需要转换成R。不幸的是,我对R不太了解 一个主要的障碍是将每个50x86069的csv 100文件加载到100、5086069阵列中 我将代码设置为打开/写入数组,然后作为循环的一部分读取每个50x86069 csv文件使用R将数据添加到三维阵列,r,loops,plyr,multidimensional-array,R,Loops,Plyr,Multidimensional Array,我在MATLAB中有一系列的函数需要转换成R。不幸的是,我对R不太了解 一个主要的障碍是将每个50x86069的csv 100文件加载到100、5086069阵列中 我将代码设置为打开/写入数组,然后作为循环的一部分读取每个50x86069 csv文件 l <- list.files(inputs) data.array<-array(0,dim=c(100,50,86069)) # loop through the input files to get the data load
l <- list.files(inputs)
data.array<-array(0,dim=c(100,50,86069))
# loop through the input files to get the data loaded into an array
for(i in 1:5)
in.file <- read.csv(paste(inputs,"/",l[[i]], sep = ""))
in.file = in.file[,-1] ## remove the first column
现在我需要将in.file放入data.arrayi,5086069
任何帮助都将不胜感激
谢谢-你在找这样的东西吗
> ar1 <- array(1:9, dim = c(3, 3))
> ar1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> ar2 <- array(10:18, dim = c(3, 3))
> ar3 <- array(19:27, dim = c(3, 3))
> ar.list <- list(ar1, ar2, ar3)
> bigarray <- array(NA, dim = c(3, 3, 3))
> for (i in 1:3) {
+
+ intr <- vector("list", 3)
+ for(j in 1:3) {
+ intr[[j]] <- ar.list[[j]][i, ]
+ }
+ bigarray[, , i] <- do.call("rbind", intr)
+ }
> bigarray
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 10 13 16
[3,] 19 22 25
, , 2
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 11 14 17
[3,] 20 23 26
, , 3
[,1] [,2] [,3]
[1,] 3 6 9
[2,] 12 15 18
[3,] 21 24 27
你在找这样的东西吗
> ar1 <- array(1:9, dim = c(3, 3))
> ar1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> ar2 <- array(10:18, dim = c(3, 3))
> ar3 <- array(19:27, dim = c(3, 3))
> ar.list <- list(ar1, ar2, ar3)
> bigarray <- array(NA, dim = c(3, 3, 3))
> for (i in 1:3) {
+
+ intr <- vector("list", 3)
+ for(j in 1:3) {
+ intr[[j]] <- ar.list[[j]][i, ]
+ }
+ bigarray[, , i] <- do.call("rbind", intr)
+ }
> bigarray
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 10 13 16
[3,] 19 22 25
, , 2
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 11 14 17
[3,] 20 23 26
, , 3
[,1] [,2] [,3]
[1,] 3 6 9
[2,] 12 15 18
[3,] 21 24 27
您可以非常轻松地利用plyr软件包中的laply功能来获得所需的结果:
list_csv = list.files("/path/to/csv_files/", pattern = "csv")
muli_dim_array = laply(list_csv, read.csv)
laply函数将函数read.csv应用于list_csv,并生成一个数组作为结果,因此函数名为laply。有关plyr的更多详细信息,请参见哈德利的
对于可扩展为多维度>2的类rbind函数,请查看abind包中的abind函数。使用abind和Lappy的解决方案:
这消除了对plyr的需要,但依赖于abind:,并且可能在CPU时间和RAM方面表现出不同的性能。在这种情况下,也许一些基准可以提供一些指导,包括基于for循环的@Roman解决方案
最后,我非常喜欢plyr的简明扼要的语法,我将首先尝试该解决方案。您可以非常轻松地利用plyr软件包中的laply函数来获得所需的结果:
list_csv = list.files("/path/to/csv_files/", pattern = "csv")
muli_dim_array = laply(list_csv, read.csv)
laply函数将函数read.csv应用于list_csv,并生成一个数组作为结果,因此函数名为laply。有关plyr的更多详细信息,请参见哈德利的
对于可扩展为多维度>2的类rbind函数,请查看abind包中的abind函数。使用abind和Lappy的解决方案:
这消除了对plyr的需要,但依赖于abind:,并且可能在CPU时间和RAM方面表现出不同的性能。在这种情况下,也许一些基准可以提供一些指导,包括基于for循环的@Roman解决方案
最后,我真的很喜欢plyr的简短、切中要害的语法,我会首先尝试这种解决方案。一个可复制的示例将大有帮助。这个问题还没有解决吗?如果任何答案解决了您的问题,请在分数下将其标记为已回答绿色复选框,或提供有关所需输出的更多详细信息。可复制的示例将大有帮助。这个问题还没有解决吗?如果任何答案解决了您的问题,请在分数下将其标记为已回答绿色复选框,或提供有关所需输出的更多详细信息。我更喜欢laply版本的语法,虽然laply可能会稍微慢一点,占用更多内存……而且我认为abind函数在您的情况下会非常有效。@PaulHiemstra我认为我们首先需要确定这是期望的结果:感谢关于abind的提示,我知道我遗漏了一些东西。两种解决方案都有效,但Roman的解决方案对于我正在加载的大型数据集更有效。谢谢你的帮助!就语法而言,我更喜欢laply版本,尽管laply可能会慢一点,占用更多内存……而且我认为abind函数在您的情况下会运行得非常好。@PaulHiemstra我认为我们首先需要确定这是期望的结果:感谢关于abind的提示,我知道我遗漏了一些东西。两种解决方案都有效,但Roman的解决方案对于我正在加载的大型数据集更有效。谢谢你的帮助!保罗和罗曼-非常感谢你的洞察力。虽然两种解决方案都很有效,但我认为Roman的可能更适合我的需要。我的一个问题是使用Roman的方法,如何从每个输入ar变量中删除第一列?第二个问题是,输入数据需要大于1的值才能为1,比如ar[ar>0]Paul和Roman,非常感谢您的见解。虽然两种解决方案都很有效,但我认为Roman的可能更适合我的需要。我的一个问题是使用Roman的方法,如何从每个输入ar变量中删除第一列?第二个问题是,输入数据需要大于1的值才能为1,类似于ar[ar>0]