edit: Решение в конце.
У меня есть кадр данных, который содержит разные переменные и сумму этих разных переменных как переменную, называемую "total".Я хочу добавить новый столбец, который вычисляет долю каждой переменной в «общей» переменной.Пример:
library(dplyr)
name <- c('A','A',
'B','B')
month = c("oct 2018", "nov 2018",
"oct 2018", "nov 2018")
value <- seq(1:length(month))
df = data.frame(name, month, value)
# Create total variable
dfTotal =
df%>%
group_by_("month")%>%
summarize(value = sum(value, na.rm = TRUE))
dfTotal[["name"]] <- "Total"
dfTotal = as.data.frame(dfTotal)
# Add total column to dataframe
df2 = rbind(df, dfTotal)
df2
, который дает фрейм данных
name month value
1 A oct 2018 1
2 A nov 2018 2
3 B oct 2018 3
4 B nov 2018 4
5 Total nov 2018 6
6 Total oct 2018 4
. Я хочу создать новый столбец с долями общего количества за каждый месяц в вышеупомянутом фрейме данных, чтобы яполучить что-то вроде
name month value share
1 A oct 2018 1 0.25 (=1/4)
2 A nov 2018 2 0.33 (=2/6)
3 B oct 2018 3 0.75 (=3/4)
4 B nov 2018 4 0.67 (=4/6)
5 Total nov 2018 6 1.00 (=6/6)
6 Total oct 2018 4 1.00 (=4/4)
Кто-нибудь знает, как я из первого кадра данных могу создать последний столбец во втором кадре данных?
Решение: Основываясь на комментарии tmfmnk,Следующее решает проблему:
df2 =
df2 %>%
group_by(month) %>%
mutate(share = value/max(value))
df2
, который дает название месяца, значение доли
<fct> <fct> <int> <dbl>
1 A oct 2018 1 0.25
2 A nov 2018 2 0.333
3 B oct 2018 3 0.75
4 B nov 2018 4 0.667
5 Total nov 2018 6 1
6 Total oct 2018 4 1