2

更新:如果有人想知道,这两个答案都有效。它们都将实现汇总表,就像您在 Excel 中模拟 Sumifs 时创建的一样。这正是我一直在寻找的。再次感谢你们俩。

我有一个看起来像这样的数据框(df),但产品更多。 df$Yr基于截止日期 >= 2012 年 3 月

Product      Classif         Yr     Revenue
a            paid_yes      TRUE     25
a            paid_yes      TRUE     20
a            paid_yes      TRUE     35
a            paid_yes      FALSE    20
a            paid_yes      FALSE    30
a            paid_yes      FALSE    30
a            paid_partial  TRUE     15
a            paid_partial  TRUE     15
a            paid_partial  FALSE    18
a            leased        TRUE     12
a            leased        TRUE     12
a            leased        FALSE    14
a            Other         TRUE     27
a            Other         FALSE    30
a            Other         TRUE     25
a            Other         FALSE    22
a            Other         TRUE     32
a            Other         FALSE    30
a            Other         TRUE     24
a            Other         FALSE    27
b            paid_yes      TRUE     45
b            paid_yes      FALSE    32
b            paid_yes      TRUE     35
b            paid_yes      FALSE    39
b            paid_partial  FALSE    42
b            paid_partial  FALSE    45
b            paid_partial  TRUE     47
b            paid_partial  FALSE    33
b            paid_partial  FALSE    28
b            leased        TRUE     48
b            leased        FALSE    46
b            leased        FALSE    45
b            leased        TRUE     37
b            leased        FALSE    33
b            leased        TRUE     46
b            leased        FALSE    44
b            Other         TRUE     49
b            Other         FALSE    45
b            Other         TRUE     43
b            Other         FALSE    39

我正在尝试按产品(a、b、c 等)绘制小平面散点图。我希望我的 y 轴是,并且 x 轴是每个中df$Classif的总百分比。或者换句话说,在给定年份的产品总收入中,每个分类占多少百分比?RevenueProductYr

我希望我的摘要框架看起来像......

Product      Classif         Yr     perc.rev
a            paid_yes      TRUE     .332
a            paid_partial  TRUE     .123
a            leased        TRUE     .099
a            Other         TRUE     .446

每个 perc.rev 加起来为 100%,给定一个Product, Classif, 和Yr

我尝试使用以下代码获取我的摘要数据集/列:

df.perc <- ddply(df, .(Product, Classif, Yr), summarise,
               perc.rev = sum(Revenue)/count(Classif))

结果数据框为我提供了、和的平均收入。我需要的是一个给定的收入的百分比,与所有相比-由ProductClassifYrClassifClassifProductYear

我很确定我只需要一些关于我的 perc.rev 公式.variablesddply. 我习惯了 Excel,通常会使用 2 个 sumifs 公式,但不确定如何在 R 函数中表达我需要在此处执行的操作。

4

2 回答 2

2

我是新手plyr,所以可能有更优雅的解决方案。(Product, Yr)首先,存储每个组合的总数。然后运行ddply

counts <- ddply(df, .(Product, Yr), summarise, count=sum(Revenue))
ddply(df, .(Product, Classif, Yr), summarise,
  perc.rev=sum(Revenue)/counts$count[counts$Product==Product[1] & counts$Yr==Yr[1]])

这使

   Product      Classif    Yr   perc.rev
1        a       leased FALSE 0.06334842
2        a       leased  TRUE 0.09917355
3        a        Other FALSE 0.49321267
4        a        Other  TRUE 0.44628099
5        a paid_partial FALSE 0.08144796
6        a paid_partial  TRUE 0.12396694
7        a     paid_yes FALSE 0.36199095
8        a     paid_yes  TRUE 0.33057851
9        b       leased FALSE 0.35668790
10       b       leased  TRUE 0.37428571
11       b        Other FALSE 0.17834395
12       b        Other  TRUE 0.26285714
13       b paid_partial FALSE 0.31422505
14       b paid_partial  TRUE 0.13428571
15       b     paid_yes FALSE 0.15074310
16       b     paid_yes  TRUE 0.22857143
于 2013-03-28T19:42:47.007 回答
1

为什么不做一个两遍过程,使用添加副产品“总计” ave(...,...,sum),然后使用添加按分类百分比

<strike>apply( ..., ..., function(x) x["Classif"]/x['total"] )<\strike>

编辑:(我还没有弄清楚这应该如何检查,但现在将尝试修复)第二部分太神秘了,可能完全是错误的。将 x["Classif"] 更改为 x["Revenue"] 可能是可以纠正的,但我认为apply完全是错误的功能。

请求是“在给定年份的产品总收入中,每个分类占多少百分比”......以及“在给定产品、分类和年份的情况下,每个 perc.rev 加起来为 100%”。现在,输出清楚地暗示至少第二部分应该是“在给定产品和年份的情况下,每个 perc.rev 加起来是 100%”。(省略分类)。

dfrm$total <- ave(dfrm$Revenue, dfrm$Product, dfrm$Yr, FUN=sum)
dfrm$prod.yr.prop <- dfrm$Revenue/dfrm$total
aggregate(dfrm$prod.yr.prop, list(class=dfrm$Classif, Yr=dfrm$Yr, Prod=dfrm$Product), FUN=sum)
          class    Yr Prod          x
1        leased FALSE    a 0.06334842
2         Other FALSE    a 0.49321267
3  paid_partial FALSE    a 0.08144796
4      paid_yes FALSE    a 0.36199095
5        leased  TRUE    a 0.09917355
6         Other  TRUE    a 0.44628099
7  paid_partial  TRUE    a 0.12396694
8      paid_yes  TRUE    a 0.33057851
9        leased FALSE    b 0.35668790
10        Other FALSE    b 0.17834395
11 paid_partial FALSE    b 0.31422505
12     paid_yes FALSE    b 0.15074310
13       leased  TRUE    b 0.37428571
14        Other  TRUE    b 0.26285714
15 paid_partial  TRUE    b 0.13428571
16     paid_yes  TRUE    b 0.22857143

这会在产品年内进行总计,然后计算这些分组中的特定于类别的比例。

于 2013-03-28T19:43:30.627 回答