On Oct 12, 2011, at 10:55 AM, Sally Zhen wrote:

Hi all,

I'm working on a loop function for a large dataset which contains 1000
different groups. I would like to reconstruct the order of events within
each group by using a loop function in R.

Not generally a good first strategy in R.

(Currently the order of events are
based on the ascending order of prev_event within the group)

Wouldn't this just be:

dfrm[order(dfrm$group, dfrm$event), ]

(Ascending is the default ordering.)
--
David.


A demo data frame:

event       prev_event   group
845          0               5360
926          153            5360
993          234            5360
234          845            5360
848          926            5360
153          993            5360
234          0               8765
968          234            8765
545          968            8765
625          111            3334
744          181            3334
181          227            3334
713          625            3334
227          713            3334
913          0               2329
372          119            2329
719          189            2329
119          324            2329
761          355            2329
890          372            2329
266          719            2329
324          761            2329
189          890            2329
355          913            2329


Below is what I have written:

ordering <- vector("list", length(unique(mydata$group)))
for (j in 1:length(unique(mydata$group))){
group.j <- mydata[mydata$group == unique(mydata$group)[j], ]
ordering.j <- c()
ordering.j[1] <- ifelse(group.j[1, ]$prev_event == 0, group.j[1, ] $event,
group.j[1, ]$prev_event)
for (i in 2:nrow(group.j)){
ordering.j[i] <- group.j[group.j$prev_event == ordering.j[i-1], ] $event}
ordering[j] <- ordering.j}
ordering

What I got is:
Error in ordering.j[i] <- group.j[group.j$prev_event == ordering.j[i - :
 replacement has length zero
ordering
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL


However, when I accidentally put a typo in the loop function, instead of ordering.j[i] <- group.j[group.j$prev_event == ordering.j[i-1], ] $event},
I put
ordering.j[i] <- group.j[group.j$prev_event == ordering.j[i-1],
]$prev_event},
The output is a list of 1000 entries, each with the first event within the
group, and I received the following warning messages:
[[1]]
[1] 1.000680e+17

[[2]]
[1] 1.001390e+17

[[3]]
[1] 1.001450e+17

49: In ordering[j] <- ordering.j :
 number of items to replace is not a multiple of replacement length
50: In ordering.j[i] <- group.j[group.j$prev_event ==  ... :
 number of items to replace is not a multiple of replacement length


Why is this happening, and how can I fix it? Any pointer will be greatly
appreciated!

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to