Hi there,
Say I have the following data frame:
df <- data.frame(name = rep(letters[seq(1,2)],each = 3),
item = rep(c('red','blue','green'), 2),
value = as.integer(c(1,3,2,7,6,5)),
weight = c(1/3, 1/3, 1/3, 1/4, 1/2, 1/4))
I want to summarise the dataframe by 'name', where for each name I want to show (1) the value corresponding to the 'green' item and (2) the weighted average of the values. I can do this using this code:
df %>%
group_by(name) %>%
summarise(green = last(value),
weighted = sum(value * weight))
I was wondering if there was an alternative to using the last()
function within summarise()
, as I don't always know the order that my data will be in (i.e. I don't know that green will always be the last item).
Would the best way be to manually re-order the 'item' column first? Was wondering if there were more elegant solutions.
Grateful for any thoughts!