创建一个列,以另一个因子变量为基础计算不同列总数的百分比?

时间:2016-04-23 12:04:40

标签: r dplyr

让我们有一些愚蠢的数据,这些数据是我在使用group by并从dplyr总结之后获得的结果

Name<-rep(c("Pepsi","Cola"),3)
Category<-c("A","A","A","B","B","B")
Value<-1:6
aha<-as.data.frame(cbind(Name,Category,Value))
aha$Value<-as.numeric(as.character(aha$Value))

我们的数据框架如下所示

   Name Category Value
1 Pepsi        A     1
2  Cola        A     2
3 Pepsi        A     3
4  Cola        B     4
5 Pepsi        B     5
6  Cola        B     6

我想计算新列,我得到值/总和(值),但条件是类别。

E.g。对于第一次,其1/6 = 0,17,因为A类别的值总和为6。

我发现如何使用plyr,但它与dplyr不相符

请帮帮我

4 个答案:

答案 0 :(得分:2)

两种不使用额外包装的替代方案:

# option 1
transform(aha, new = ave(Value, Category, FUN = function(x) x/sum(x)))
# option 2
aha$new <- ave(aha$Value, aha$Category, FUN = function(x) x/sum(x))

答案 1 :(得分:1)

您可以使用dplyr

aha %>% group_by(Category) %>% mutate(new=Value/sum(Value))

#Source: local data frame [6 x 4]
#Groups: Category [2]

#    Name Category Value       new
#  (fctr)   (fctr) (dbl)     (dbl)
#1  Pepsi        A     1 0.1666667
#2   Cola        A     2 0.3333333
#3  Pepsi        A     3 0.5000000
#4   Cola        B     4 0.2666667
#5  Pepsi        B     5 0.3333333
#6   Cola        B     6 0.4000000

答案 2 :(得分:0)

使用data.table

library(data.table)
setDT(aha)[, new := Value/sum(Value) , by = Category]

答案 3 :(得分:0)

基地R还有一个

aha$new <- unlist(tapply(aha$Value, aha$Category,function(x) x/sum(x)))