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 で実行され、それぞれ正の購入値があります。

パーセンテージという 3 番目の変数を追加し、関連する製品データ ID について、週 = 15 の場合の購入数 / 購入額と等しくしたいと考えています。

私の問題は、この方程式を書くときに、週 = 15 と現在の行の製品 ID のみを参照するように RI に指示する方法がわからないことです。

どんな助けでも大歓迎です!

4

2 に答える 2

2

week==415 の代わりに使用します (そのため、サンプル データで動作します)。これらの結果はすべてvalue == TRUEweek==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])
于 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 に答える