2014-04-29 110 views
1

我试图解决两个R程序上的主要问题。R矩阵结构 - 操纵问题

首先,我需要创建一种矩阵结构来为不同的个体(行)存储不同变量(列)的值。

主要问题是,在每对行列中,我需要有一个时间序列形式的观测向量。由于每个不同变量的时间序列不是连续采样,所以不同的时间序列是不规则的。

我想用rownamescolnames作为矩阵中的访问项目的键。

不知道这是否是我需要的最佳结构。正在使用数据帧,但有建议转移到矩阵,因为它应该存储大量的数据(数据流)。

回答

4

您可以将单个时间序列存储在列表中,如l,并设置dim属性。您也可以设置dimnames(即行名称和列名称)。这样,您可以使用它几乎一样,如果它是一个矩阵/ data.frame

# Generate length 15 vectors for 10 subjects 
l <- replicate(10, list(rnorm(15))) 
dim(l) <- c(5, 2) 
dimnames(l) <- list(subject=1:5, variable=c("a", "b")) 
l 
##  variable 
## subject a   b   
##  1 Numeric,15 Numeric,15 
##  2 Numeric,15 Numeric,15 
##  3 Numeric,15 Numeric,15 
##  4 Numeric,15 Numeric,15 
##  5 Numeric,15 Numeric,15 

现在,您可以:

l[[1,1]] # time series for subject 1, var 1 
## [1] -0.02425 0.88986 0.36260 -1.78774 -1.48874 -1.46750 0.38329 
## [8] 0.18573 -1.65675 0.59374 0.81669 1.06867 -1.71847 0.81889 
## [15] 0.10796 

l[[2, "b"]] # time series for subject 2, var "b" 
## [1] 0.45616 -0.67563 -1.42116 -0.42621 0.51648 0.35147 0.68243 
## [8] 1.17581 -0.16696 0.77492 -1.76446 1.50580 0.06075 0.37734 
## [15] -0.92797 

等等

+0

+1我以前意外创建了包含列表的矩阵,但是在故意创建矩阵时,我从未想过在现有列表中设置“dim”。 – jbaums

+0

请注意,l [[2,'b']]'指的是第二个_row_的变量'b'。在@Michael的例子中,这也是主题2,但是如果主题失灵,或者如果有一些失踪,情况可能不是这样。当然对于这个例子,'l [['2','b']]'会将'l'分到变量'b'和名为'2'的行。 – jbaums