R中长度不同的数组

时间:2011-09-01 09:35:00

标签: arrays r

我使用R进行统计分析。 我想根据ID列将数据分组到一个数组中。这导致具有唯一ID的阵列,每个单元包括对应ID的数据阵列。由于每个ID的数据数量不相似,因此每个单元格中的每个数组都有不同的长度。

所以我想知道如何使用R?

创建长度不同的数组

我已经拥有以下代码,但收到错误:

#number of unique IDs
size<-unique(data[,1]);


for (i in 1:length (gr))
  {
  index<- which(data[,1]==gr[i]);
    data_c[[i,1]]<-data[index,];
}

这是错误

  

提供的元素多于要替换的元素

提前感谢任何评论。

我通过一个例子来解释我的问题:

我有以下数据称为DATA_ALL:

DATA_ALL[]=
       id     age   T1     T2    T3     T4 
       1       20     1      0     0      0 
       1       20    NA      0    NA      0 
       1       20     0      0     0      0 
       5       30     1     NA     0      0 
       5       30     0      0     0      1 
       6       40     0      1     0      0 

我想将每个id的数据分组并将所有数据放入一个数组(数组数组)中:

DATA_GROUPED []=
               id    data     
       1       1     X1[]=[an array includes all data from DATA_ALL where the id=1]     
       2       5     X2[]=[an array includes all data from DATA_ALL where the id=5]
       3       6     X3[]=[an array includes all data from DATA_ALL where the id=6]

请注意X1的长度!= X2!= X3

那我怎么能创建DATA_GROUPED []矩阵??

1 个答案:

答案 0 :(得分:5)

几乎不可能回答与您的代码相关的问题,但总的来说,我认为您要做的是创建一个list vectors,有点像这样:

one<-letters[1]
two<-letters[2:3]
three<-letters[4:6]
combined<-list(one=one, two=two, three=three)

请务必立即正确使用索引,最好使用[[

for(i in 1:length(combined))
{
  cat("The contents of item", names(combined)[i], "are:", combined[[i]], "\n")
}

输出:

The contents of item one are: a 
The contents of item two are: b c 
The contents of item three are: d e f 

修改(编辑问题后):

split.data.frame(DATA_ALL, DATA_ALL[,1])

检查?split并记下详细信息中的第一段。

注意这确实会创建一个矩阵/数组列表。