我在R studio中遇到3个问题。即使我可以计算出一种非常简单的方法,它也不是很干净(就像很多次使用过滤器函数一样)。这是下面的示例数据集。 The dataset
实际上,实际数据集包含超过一百万,因此我想知道一种有效的计算方法。另外,如果可能,我要避免创建新的数据集。
我要在这组中做的是
如何总结“品牌A的家庭人数”?
如何总结“品牌A的销售额”?
如何总结“品牌占所有家庭的百分比”(我的意思是“渗透率”)?
感谢您的帮助。我真的很感激。
答案 0 :(得分:0)
这是使用data.table
的解决方案。有很多资源可以告诉您如何汇总变量,并且有几种不同的方法可以做到这一点。
如果您读到有关data.table
here的信息,它也会回答您的问题。
library(data.table)
library(magrittr)
library(reprex)
x <- data.table(code = 1:5,
sales = 2000,
household = c(12345, 3598, 456, 45698, 4875),
brand = c("A", "B", "A", "C", "A"))
# gives counts by brands and then filtered for brand A
one <- x[, .N, by = .(brand)] %>%
.[brand == "A"]
# gives sums by brand
two <- x[, sum(sales), by = .(brand)] %>%
.[brand == "A"]
# make new column with percent of household
x[, percent := household / sum(x$household)]
# summarise the percent
three <- x[, sum(percent), by = .(brand)]
由reprex package(v0.2.0)于2019-02-10创建。
答案 1 :(得分:0)
这是在哪里使用称为tidyverse(https://www.tidyverse.org)的软件包集合的完美示例。 dplyr是tidyverse中的软件包,它提供了一种非常简单,透明和易读的方式来执行此操作。您不必创建新的数据框。
在您的数据集中,我相信“住户”列是住户的ID号。 (如果实际上是家庭人数,则可以轻松调整代码以回答您的问题)
countbrandA<-dataset %>% filter(brand=="A") %>% summarize(N=n())
totalsalesbrandA <- filter(brand=="A") %>% summarize(salestotal=sum(sales))
grandtotal<-dataset %>% summarize(N=n())
brandpercentageA=countbrandA/grandtotal
或者要在单个dplyr管道中获得每个品牌的比例,您可以这样做
brandpercentage <- dataset %>%
group_by(brand) %>%
summarize(N=n()) %>%
ungroup() %>%
mutate(percent=N/grandtotal)