编辑:最后的解决方案。
我有一个数据框,其中包含不同的变量以及这些不同变量的总和,称为变量“总计”。 我想添加一个新列来计算“总计”变量中每个变量的份额。 示例:
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