开发者

an array of arrays varied in length in R

开发者 https://www.devze.com 2023-04-01 15:01 出处:网络
I use R for my statistical analysis. I wanna group my data in an array based on the ID column. This results in having an array of unique IDs which each cell includes a data array of correspondence ID.

I use R for my statistical analysis. I wanna group my data in an array based on the ID column. This results in having an array of unique IDs which each cell includes a data array of correspondence ID. Since the number of the data per ID is not similar, therefor each array in each cell has different length.

So I wonder how I can create an array of arrays varied in length using R?

I already having the following codes but get an error:

#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,];
}

Here is the error

more elements supplied than there are to replace

Thanks in advance for any comment.

I explain my problem by an example:

I have following data called it DATA_ALL:

DATA_ALL[]=
       id     age   T1     T2    T3     T4 
       1       20     1      0  开发者_如何学Go   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 

I want to group the data of each id and put all in an array (array of arrays):

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]

Please note that the length of X1!=X2!=X3

So how I can create the DATA_GROUPED[] matrix??


It is nearly impossible to answer your question in relation to your code, but in general, I think what you want to do is create a list of vectors, a bit like this:

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

Be sure to use indexing correctly now, and preferably with [[:

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

Output:

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

Edit (following edit of question):

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

Check ?split and note the first paragraph in Details.

Note this indeed creates a list of matrices/arrays.

0

精彩评论

暂无评论...
验证码 换一张
取 消