Dear Krissie

I think you misunderstood Rui's response. He was generating some fake data to test the code not suggesting you rebuild your data frame.

Michael

On 25/01/2021 16:01, krissievdh wrote:
Hi,
Thanks for your response.

I do get what you're doing. However, the table I sent is just a small piece
of the complete database. So for me to have to add in everything with
structure list (c ......) by hand would be too much work.
Just to give you an idea, the database is around 16000 rows and has 40
columns with other variables that I do want to keep. So I  kind of want to
find a way to keep everything and just add a couple of columns with the
calculated time for vigilant behavior and the percentage.

Still thanks for thinking with me. I am looking into the aggregate
function. Hopefully, this could be a solution.

krissie






Op ma 25 jan. 2021 16:44 schreef Rui Barradas <ruipbarra...@sapo.pt>:

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@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.



        [[alternative HTML version deleted]]

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

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

Reply via email to