[R] index to select rows of a large matrix

tsunhin wong thjwong at gmail.com
Fri May 22 01:32:20 CEST 2009


Dear Jim,
Thanks for your suggestion.

I have a follow-up question for fellow R Users that have followed this thread:

*I used to create two lists by some very flexible criteria to compare
from "iData" and pass the two lists to *ANOTHER FUNCTION* that further
decompose the two lists and do some case by case analysis:

comp.lst[[1]] <- subset(iData,(Session==1 & TrialList==2 & BadTrial==0
& Correct==1 & Critical.BT>0))
comp.lst[[2]] <- subset(iData,(Session==2 & TrialList==2 & BadTrial==0
& Correct==1 & Critical.BT>0))

*The function will then do some subject by subject processing:

tmplist <- comp.lst[[1]]
subject <- unique(tmplist$Subject)
Psubjmatrix <- NULL
for(j in 1:length(subj)) { ##divide the list and process per subject in the list
        subjtriallist <- subset(tmplist,(Subject==subj[j])) ##divide
the list and process per subject in the list
        print(paste("Start working on Subject ",subj[j],sep=""),quote=FALSE)
        ##The sub-divided list is passed to another function to
extract data from corresponding object
        Ptrialmatrix <- SeekObject(subjtriallist,seconds,samplesize,sdmax);
        ##add rowmean to subject pupil matrix
        Psubjmatrix <- cbind(Psubjmatrix, rowMeans(Ptrialmatrix,
na.rm=TRUE, dims=1))
}

*But now, I have a pre-processed the objects and cooked up a
1500x20000 matrix, and there is no need to get these objects one by
one for extraction, I may just do the following:

Ptrialmatrix <- PMasterMatrix[subjindex,,drop=FALSE]

*However, on passing the index to the function, I cannot further
sub-divide the list index by Subject.

I have been thinking of passing the criteria to within the function.
But... what smarter thing I can do to make it works?

- John


On Thu, May 21, 2009 at 10:33 AM, jim holtman <jholtman at gmail.com> wrote:
> Assuming that you get the list of indices into iData for the criteria, then
> you can use that to get the appropriate rows:
>
> indx <- which(iData >5)  # or whatever your criteria is
> DataSeq[indx,, drop=FALSE]  # gives you a subset matrix of just the rows you
> are interested in.
>
> On Thu, May 21, 2009 at 10:10 AM, tsunhin wong <thjwong at gmail.com> wrote:
>>
>> Dear R Users,
>>
>> I have created a 1500 x 20000 data frame - DataSeq. Each of the 1500
>> rows represents a data sequence.
>> I have another data frame iData that stores the information of these
>> 1500 data sequences in the same order, for example, condition, gender,
>> etc.
>>
>> If I use "subset" to select certain groups within iData according to
>> some criteria that I have set, e.g. condition, gender
>> Then how can I used the retrieved subset of iData to point to and
>> retrieve corresponding rows in the DataSeq data.frame for
>> manipulations and analysis?
>>
>> I hope some of you can give me some idea!
>> Thank you very much!!!
>>
>> - John
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem that you are trying to solve?
>




More information about the R-help mailing list