Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调整R中较小段的数据结构?_R_Data Structures - Fatal编程技术网

如何调整R中较小段的数据结构?

如何调整R中较小段的数据结构?,r,data-structures,R,Data Structures,我在下面的数据结构中有四个完整的信号。我想将每个信号分成360个块或接近它的块。 当前数据结构[1:541650,1:4]其中四个长度为541650的信号,我想将其转换为数据结构[1:360,1:4*1505]或类似结构,我为数据结构创建了多余的空间,因为1:4*1504会丢失一些尾部点 >>> 541650*4.0 2166600.0 >>> 360*1505*4 2167200.0 R中的当前数据结构、当前代码及其内容 m1 <- matrix(1

我在下面的数据结构中有四个完整的信号。我想将每个信号分成360个块或接近它的块。 当前数据结构
[1:541650,1:4]
其中四个长度为541650的信号,我想将其转换为数据结构
[1:360,1:4*1505]
或类似结构,我为数据结构创建了多余的空间,因为
1:4*1504
会丢失一些尾部点

>>> 541650*4.0
2166600.0
>>> 360*1505*4
2167200.0
R中的当前数据结构、当前代码及其内容

m1 <- matrix(1:541650, ncol=4, nrow=541650); str(m1)
#int [1:541650, 1:4] 1 2 3 4 5 6 7 8 9 10 ...
#case: num [1:541650, 1:4] -0.675 -0.67 -0.67 -0.65 -0.65 -0.6 -0.555 -0.535 -0.52 -0.515 ...

预期输出:6020x6020矩阵

R:3.3.1

OS:Debian 8.5

一个选项是将其转换为
数组
,但
数组
只能容纳固定维度。因此,如果元素数量不足,请在末尾附加一些NAs,然后转换为3D阵列

m2 <- array(`length<-`(m1, 30), dim = c(2,5,3)) 
或者另一个选项是使用
lappy
在第三维中循环,并应用
cor

res2 <- lapply(seq(dim(m2)[3]), function(i) cor(m2[,,i]))

res2您可能需要通过指定
dim
m1来创建一个
数组
。我注意到值与2166600和2167200不一样<代码>数组
只能容纳固定的维度。我不确定您希望如何处理额外的元素。因此,也许,在末尾附加NA并转换为
array
假设我使用
m1,这将是一个不同的问题,因为它与您原来的问题不清楚post@Masi它有3个维度,在您的示例中,
360*1505*4
,即
dim=c(360,1505,4)
,因此,如果您想将数组子集,假设第三维度的第一个元素,
m2[,1]
@Masi我刚刚创建了一个可复制的小例子。刚刚用一个新的示例替换它,并使用
cor
@Masi如果您查看
?cor
中的文档,则有
use
参数,它可以接受值
“everything”、“all.obs”、“complete.obs”、“na.or.complete”或“pairwise.complete.obs”
。而且当你应用到一个矩阵时,它会返回一个correlations@Masi您的输入数据集是具有特定维度的单个矩阵。更改的数据集(“m2”)是一个三维数组,每个元素沿第三维方向具有另一组维度。如果希望
res2
成为单个矩阵,可以通过
do.call(rbind,res2)
do.call(cbind,res2)
@Masi检查维度的
str
,而不是
res2
dim(do.call(rbind,res2))
将为您提供维度,而
str(do.call(rbind,res2))
给出结构
m2 <- array(`length<-`(m1, 30), dim = c(2,5,3)) 
res <- apply(m2, 3, FUN = function(x) list(cor(x)))
identical(res[[1]][[1]], cor(m2[,,1]))
#[1] TRUE
res2 <- lapply(seq(dim(m2)[3]), function(i) cor(m2[,,i]))
set.seed(24)
m1 <- matrix(rnorm(45), ncol=5, nrow=9)