我有一个像:
Country is_sale count
AU 1 10
AU 0 30
SE 1 5
SE 0 4
我希望得到的销售百分比(is_sale = 1)超过每个国家/地区的总数:
国家/地区
AU
SE
输入将是:
country ratio
AU 0.23
SE 0.55
如何使用dplyr实现最佳效果?
答案 0 :(得分:0)
我会将您的二进制标志转换为布尔值,因为它使逻辑评估更简单一些。然后使用dplyr
,您可以按Country
进行分组,并在汇总函数的两个步骤中计算分子和分母。
注意在汇总步骤的第二行引用ratio
的能力;这是使dplyr
非常简洁的事情之一。
library(dplyr)
Country = c('AU','AU','SE','SE')
is_sale = c(1,0,1,0) %>% as.logical
count = c(10,30,5,4)
df = data.frame(Country, is_sale, count)
df %>%
group_by(Country) %>%
summarize(
ratio = sum(ifelse(is_sale, count, 0)),
ratio = ratio / sum(count)
)