Calculating First Occurance by a factor
I have another question regarding ddply. In my actual data.frame, I have many other column variables corresponding to the type of the trial. I'm wondering if I can have ddply include those in firstfixtime as well. I tried messing with the line df$FixTime[which.min(df$FixInx)] changing it to df[which.min(df$FixInx)] or adding new lines with the additional columns that I want to include, but nothing seemed to work. I'll admit I only have a mild understanding of what is going on with the function .fun. :-)
Mike Lawrence wrote:
I discovered Hadley Wickham's "plyr" package last week and have found
it very useful in circumstances like this:
library(plyr)
firstfixtime = ddply(
.data = data
, .variables = c('Sub','Tr','IA')
, .fun <- function(df){
df$FixTime[which.min(df$FixInx)]
}
)
On Mon, Mar 30, 2009 at 3:40 PM, jwg20 <jason.gullifer at gmail.com> wrote:
I'm having difficulty finding a solution to my problem that without
using a
for loop. For the amount of data I (will) have, the for loop will
probably
be too slow. I tried searching around before posting and couldn't find
anything, hopefully it's not embarrassingly easy.
Consider the data.frame, Data, ?below
Data
Sub Tr ?IA ? FixInx ?FixTime
p1 ? t1 ?1 ? ?1 ? ? ? ?200
p1 ? t1 ?2 ? ?2 ? ? ? ?350
p1 ? t1 ?2 ? ?3 ? ? ? ?500
p1 ? t1 ?3 ? ?4 ? ? ? ?600
p1 ? t1 ?3 ? ?5 ? ? ? ?700
p1 ? t1 ?4 ? ?6 ? ? ? ?850
p1 ? t1 ?3 ? ?7 ? ? ? ?1200
p1 ? t1 ?5 ? ?8 ? ? ? ?1350
p1 ? t1 ?5 ? ?9 ? ? ? ?1500
What I'm trying to do is for each unique IA get the first occurring
FixTime.
This will eventually need to be done by each Trial (Tr) and each Subject
Number (Sub). FixInx is essentially the number of rows in a trial. The
resulting data.frame is below.
Sub Tr ?IA ?FirstFixTime
p1 ? t1 ?1 ? 200
p1 ? t1 ?2 ? 350
p1 ? t1 ?3 ? 600
p1 ? t1 ?4 ? 850
p1 ? t1 ?5 ? 1350
Here is the solution I have now.
agg = aggregate(data$FixInx, list(data$Sub, data$Tr, data$IA), min) #get
the
minimum fix index by Sub, Tr, and IA... I can use this min fix index to
pull
out the desired fixtime
agg$firstfixtime = 0 # new column for results
for (rown in 1:length(rownames(agg))){ #cycle through rows and get each
data$firstfixtime from FixTime in matching rows
?agg$firstfixtime[rown] = as.character(data[data$Tr == agg$Group.2[rown]
&
data$Sub == agg$Group.1[rown] & data$IA == agg$Group.3[rown] &
data$FixInx
== agg$x[rown], ]$FixTime)
}
--
View this message in context:
http://www.nabble.com/Calculating-First-Occurance-by-a-factor-tp22789964p22789964.html
Sent from the R help mailing list archive at Nabble.com.
______________________________________________ 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.
-- Mike Lawrence Graduate Student Department of Psychology Dalhousie University Looking to arrange a meeting? Check my public calendar: http://tinyurl.com/mikes-public-calendar ~ Certainty is folly... I think. ~
______________________________________________ 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.
View this message in context: http://www.nabble.com/Calculating-First-Occurance-by-a-factor-tp22789964p22829525.html Sent from the R help mailing list archive at Nabble.com.