我有以下数据框:
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]))
但是,这并不奇怪,它不会运行。我不知道如何计算给定日期的总和。
有任何线索吗?
答案 0 :(得分:4)
您的问题的答案是
df %>% group_by(date) %>% mutate(ratio = value/sum(value))