我是R的新手并试图解决问题。
以下是我的数据示例:
product_id week purchases
53 0 19
53 1 27
53 2 34
53 3 43
53 4 44
对于这些数据,有三种类型的product_id,而周变量每种都在0-15之间,每种都有正的购买价值。
我想添加一个名为百分比的第三个变量,并希望它等于购买/当周= 15时的购买价值,相关的产品数据ID。
我的问题是我不知道怎么告诉R我只想参考周= 15&在写这个等式时,我所在的行的产品ID。
任何帮助将不胜感激!
答案 0 :(得分: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]
使用plyr
和ddply
library(plyr)
ddply(DF, .(product_id), mutate, prop.purchases = purchases / purchases[week==4])
答案 1 :(得分:0)
使用简单的ifelse
来处理简单的样本数据:
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