0

我是 R 新手,正在尝试解决问题。

这是我的数据示例:

product_id             week           purchases
      53                0                   19              
      53                1                   27               
      53                2                   34                   
      53                3                   43                
      53                4                   44     

对于这个数据,product_id 有 3 种类型,每一种的 week 变量从 0 到 15 运行,每一种都有一个正的购买值。

我想添加第三个变量,称为百分比,并希望它等于购买/当周 = 15 时的购买价值,用于相关的产品数据 ID。

我的问题是,在编写此方程式时,我不知道如何告诉 RI 只想参考 week=15 和我所在行的产品 ID。

任何帮助,将不胜感激!

4

2 回答 2

2

使用week==4而不是 15(因此它适用于您的示例数据)。所有这些结果都假设只有value == TRUE一个week==4

你可以使用ave(和transform

transform(DF, prop.purchases = ave(purchases, product_id, FUN = function(x) x/ x[week==4]))

使用data.table

library(data.table)
DT <- data.table(DF)
DT[, prop.purchase := purchases / purchases[week==4], by = product_id]

使用键的替代方法和by-without-by

DT <- data.table(DF, key = 'product_id')

DT[DT[week==4], prop.purchase := purchases / i.purchaes]

使用plyrddply

library(plyr)

ddply(DF, .(product_id), mutate,  prop.purchases = purchases / purchases[week==4])
于 2013-04-17T03:05:47.287 回答
0

ifelse对您的简单示例数据使用 simple有效:

样本数据称为样本

sample data  (with added data for id 54 and 55: 
product_id  week    purchases
53  0   19
53  1   27
53  2   34
53  3   43
53  4   44
53  14  23
54  0   23
54  1   21
54  2   22
54  3   32
54  4   33
54  14  22
55  0   22
55  1   33
55  2   44
55  3   55
55  4   11
55  14  12


sample$percent<-with(sample,ifelse(product_id ==53, purchases/purchases[week==14 &product_id==53],ifelse(product_id ==54, purchases/purchases[week==14 & product_id==54],purchases/purchases[week==14 &product_id==55])))

Output: 
 product_id week purchases   percent
1          53    0        19 0.8260870
2          53    1        27 1.1739130
3          53    2        34 1.4782609
4          53    3        43 1.8695652
5          53    4        44 1.9130435
6          53   14        23 1.0000000
7          54    0        23 1.0454545
8          54    1        21 0.9545455
9          54    2        22 1.0000000
10         54    3        32 1.4545455
11         54    4        33 1.5000000
12         54   14        22 1.0000000
13         55    0        22 1.8333333
14         55    1        33 2.7500000
15         55    2        44 3.6666667
16         55    3        55 4.5833333
17         55    4        11 0.9166667
18         55   14        12 1.0000000
于 2013-04-17T03:24:00.497 回答