如何根据此数据框子集的值计算列的比率?

时间:2016-05-11 15:07:39

标签: r dplyr

我有以下数据框:

date           value     country
2016-10-1      1         US
2016-10-1      3         FR
2016-10-1      4         Other
2016-10-2      3         US
2016-10-2      2         FR

以下是可再现的例子:

mydf <- data.frame(
    date=c("2016-10-01","2016-10-01","2016-10-01","2016-10-02","2016-10-02"),
    value=c(1,3,4,3,2),
    country=c("US", "FR", "Other", "US", "FR"))

我想添加一个新列&#34;比率&#34;它计算一行与同一日期所有行的比率。

例如,对于2016-10-1的日期,我们的总值为8.因此2016-10-1 / US行的比率为1/8和2016-10-1的比率/ FR是3/8

预期的数据框是:

date           value     country   ratio
2016-10-1      1         US        0.125
2016-10-1      3         FR        0.375
2016-10-1      4         Other     0.5
2016-10-2      3         US        0.6
2016-10-2      2         FR        0.4

我尝试过类似的东西:

mydf <- mydf %>% mutate(ratio = value / sum(mydf[date==date]))

但是,这并不奇怪,它不会运行。我不知道如何计算给定日期的总和。

有任何线索吗?

1 个答案:

答案 0 :(得分:4)

您的问题的答案是

df %>% group_by(date) %>% mutate(ratio = value/sum(value))