Hi, I have a dataset (d_vigi)with this kind of data: behavior type duration(s) observation nr species Non-vigilant 5 1 red deer Vigilant 2 1 red deer Vigilant 2 1 red deer Non-vigilant 3 1 red deer Vigilant 7 2 red deer Vigilant 2 2 red deer Non-vigilant 1 2 red deer Unkown 2 2 red deer Now I have to calculate the percentage of vigilant behavior spent per observation. So eventually I will need to end up with something like this: Observation nr Species vigilant(s) total (s) percentage of vigilant (%) 1 red deer 4 12 33 2 red deer 9 12 75 Now I know how to calculate the total amount of seconds per observation. But I don't know how I get to the total seconds of vigilant behavior per observation (red numbers). If I could get there I will know how to calculate the percentage. I calculated the total duration per observation this way: for(id in d_vigi$Obs.nr){ d_vigi$t.duration[d_vigi$Obs.nr==id]<-sum(d_vigi$'Duration.(s).x'[d_vigi$Obs.nr==id]) } this does work and gives me the total (s) but i don't know how to get to the sum of the seconds just for the vigilant per observation number. Is there anyone who could help me? Thanks, Krissie [[alternative HTML version deleted]]
Dear Krissie I think you may be looking for the aggregate command. Note that this is a plain text list so if you post in HTML we do not see what you see. In this case we did not see any red numbers. Michael On 25/01/2021 13:57, krissievdh wrote:> Hi, > > I have a dataset (d_vigi)with this kind of data: > behavior type duration(s) observation nr species > Non-vigilant 5 1 red deer > Vigilant 2 1 red deer > Vigilant 2 1 red deer > Non-vigilant 3 1 red deer > Vigilant 7 2 red deer > Vigilant 2 2 red deer > Non-vigilant 1 2 red deer > Unkown 2 2 red deer > Now I have to calculate the percentage of vigilant behavior spent per > observation. > > So eventually I will need to end up with something like this: > Observation nr Species vigilant(s) total (s) percentage of vigilant (%) > 1 red deer 4 12 33 > 2 red deer 9 12 75 > > > Now I know how to calculate the total amount of seconds per observation. > But I don't know how I get to the total seconds of vigilant behavior per > observation (red numbers). If I could get there I will know how to > calculate the percentage. > > > I calculated the total duration per observation this way: > for(id in d_vigi$Obs.nr){ > > d_vigi$t.duration[d_vigi$Obs.nr==id]<-sum(d_vigi$'Duration.(s).x'[d_vigi$Obs.nr==id]) > } > > this does work and gives me the total (s) but i don't know how to get to > the sum of the seconds just for the vigilant per observation number. Is > there anyone who could help me? > > Thanks, > Krissie > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >-- Michael http://www.dewey.myzen.co.uk/home.html
Hello, Try the following. First aggregate the data, then get the totals, then the percentages. Finally, put the species in the result. agg <- aggregate(formula = `duration(s)` ~ `observation nr` + `behavior type`, data = d_vigi, FUN = sum, subset = `behavior type` == 'Vigilant') agg$total <- tapply(d_vigi$`duration(s)`, d_vigi$`observation nr`, FUN = sum) agg$percent <- round(100 * agg$`duration(s)`/agg$total) res <- merge(agg, d_vigi[c(1, 3:4)]) res[!duplicated(res), ] Data in dput format: d_vigi <- structure(list(`behavior type` = c("Non-vigilant", "Vigilant", "Vigilant", "Non-vigilant", "Vigilant", "Vigilant", "Non-vigilant", "Unkown"), `duration(s)` = c(5L, 2L, 2L, 3L, 7L, 2L, 1L, 2L), `observation nr` = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), species = c("red deer", "red deer", "red deer", "red deer", "red deer", "red deer", "red deer", "red deer")), class = "data.frame", row.names = c(NA, -8L)) Hope this helps, Rui Barradas ?s 13:57 de 25/01/21, krissievdh escreveu:> Hi, > > I have a dataset (d_vigi)with this kind of data: > behavior type duration(s) observation nr species > Non-vigilant 5 1 red deer > Vigilant 2 1 red deer > Vigilant 2 1 red deer > Non-vigilant 3 1 red deer > Vigilant 7 2 red deer > Vigilant 2 2 red deer > Non-vigilant 1 2 red deer > Unkown 2 2 red deer > Now I have to calculate the percentage of vigilant behavior spent per > observation. > > So eventually I will need to end up with something like this: > Observation nr Species vigilant(s) total (s) percentage of vigilant (%) > 1 red deer 4 12 33 > 2 red deer 9 12 75 > > > Now I know how to calculate the total amount of seconds per observation. > But I don't know how I get to the total seconds of vigilant behavior per > observation (red numbers). If I could get there I will know how to > calculate the percentage. > > > I calculated the total duration per observation this way: > for(id in d_vigi$Obs.nr){ > > d_vigi$t.duration[d_vigi$Obs.nr==id]<-sum(d_vigi$'Duration.(s).x'[d_vigi$Obs.nr==id]) > } > > this does work and gives me the total (s) but i don't know how to get to > the sum of the seconds just for the vigilant per observation number. Is > there anyone who could help me? > > Thanks, > Krissie > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >