Jessi Brown
2008-Jun-25 17:29 UTC
[R] data frame manipulation - splitting monitoring interval and assigning stage
Hello, everyone. I'm hoping to prevent myself from doing a lot of pointing and clicking in Excel. I have a dataframe of bird nest check observations, in which I know the date of the first check, the date of the second check (both currently in Julian date format), the status of the nest at the second check (alive or failed), and the date that the nest hatched (i.e. changed from Incubation stages to Brood-rearing stage). Many nests have more than one record, as there were several nest checks throughout the duration of the nesting attempt. What I want to do is assign a nest Stage variable, either Incubation or Brood-rearing. It's very easy to do so when the second nest check was before the hatch date (incubation), or when the first nest check was after the hatch date (brood-rearing). But I can't figure out a quick way to split the interval when it contained both incubation and brood-rearing activities. I'd like to go from: Check1 Check2 HatchDate 101 121 110 to: Check1 Check2 HatchDate Stage 101 109 110 I 110 121 110 B because even though the nest wasn't actually checked on the day of hatching, we know that it transitioned to the next stage on hatch day. There's other covariates as well as the unique nest ID which need to be carried along too, just like HatchDate. If anyone who is good at dataframe manipulation could suggest some code to perform these actions, I would really appreciate it. Thanks in advance. cheers, Jessi Brown Ecology, Evolution, and Conservation Biology University of Nevada, Reno
jim holtman
2008-Jun-25 23:19 UTC
[R] data frame manipulation - splitting monitoring interval and assigning stage
Is this what you want:> x <- read.table(textConnection("Check1 Check2 HatchDate+ 101 121 110 + 130 150 140 + 140 150 160"), header=TRUE)> closeAllConnections() > xCheck1 Check2 HatchDate 1 101 121 110 2 130 150 140 3 140 150 160> do.call(rbind, apply(x,1,function(.row){+ if (.row[3] < .row[2]){ + # split out the data + data.frame(Check1=c(.row[1], .row[3]), + Check2=c(.row[3] - 1, .row[2]), + Check3=c(.row[3], .row[3]), + Stage=c("I", "B")) + } + else { + # normal; just copy over + data.frame(Check1=.row[1], Check2=.row[2], Check3=.row[3], Stage="X") + } + })) Check1 Check2 Check3 Stage Check1 101 109 110 I HatchDate 110 121 110 B Check11 130 139 140 I HatchDate1 140 150 140 B Check12 140 150 160 X On Wed, Jun 25, 2008 at 1:29 PM, Jessi Brown <jessilbrown at gmail.com> wrote:> Hello, everyone. > > I'm hoping to prevent myself from doing a lot of pointing and clicking > in Excel. I have a dataframe of bird nest check observations, in which > I know the date of the first check, the date of the second check (both > currently in Julian date format), the status of the nest at the second > check (alive or failed), and the date that the nest hatched (i.e. > changed from Incubation stages to Brood-rearing stage). Many nests > have more than one record, as there were several nest checks > throughout the duration of the nesting attempt. > > What I want to do is assign a nest Stage variable, either Incubation > or Brood-rearing. It's very easy to do so when the second nest check > was before the hatch date (incubation), or when the first nest check > was after the hatch date (brood-rearing). But I can't figure out a > quick way to split the interval when it contained both incubation and > brood-rearing activities. > > I'd like to go from: > > Check1 Check2 HatchDate > 101 121 110 > > to: > > Check1 Check2 HatchDate Stage > 101 109 110 I > 110 121 110 B > > because even though the nest wasn't actually checked on the day of > hatching, we know that it transitioned to the next stage on hatch day. > > There's other covariates as well as the unique nest ID which need to > be carried along too, just like HatchDate. > > If anyone who is good at dataframe manipulation could suggest some > code to perform these actions, I would really appreciate it. Thanks in > advance. > > > cheers, Jessi Brown > Ecology, Evolution, and Conservation Biology > University of Nevada, Reno > > ______________________________________________ > 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 you are trying to solve?