这个问题已经在这里有一个答案:
我与R中的工作室3个问题中挣扎。连我可以计算的方式很简单,这是不是很干净(如使用滤镜功能很多次)。这是一个样本数据集在下面。 The dataset。
其实,真正的数据集包含了100多万,所以我想知道一个有效的方法来计算。另外,如果有可能,我想避免创建新数据集。
我想在这一套做的是,
谢谢您的帮助。我真的很感激。
这是在哪里使用所谓的tidyverse(https://www.tidyverse.org)包的集合一个很好的例子。 dplyr是内tidyverse它提供了一个非常简单的,透明的,并且可读取的方式来做到这包。您不必创建新dataframes。
在你的数据集,我相信列家庭是家庭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)
下面是使用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年2月10日。