3

私が現在知っている基本的なツール (どの、順序、if、%in%、順序など) を考えると、「一意性の問題」と呼ばれる 1 つの問題に頻繁に遭遇します。

問題は基本的にこのように見えます...

別の生の行列 B から入力したい行列 AI があります。

 A:  
     [upc]  [day1]    [day2]     ...    day52 
[1]  123     NA       NA                 NA
[2]  456     NA       NA                 NA
[3]  789     NA       NA                 NA

B は非常に巨大な行単位であるため、ループは問題外です。

     [upc]    [quantity]          [day] 
[1]  123         11                 1
[2]  123          2                 1
[3]  789          5                 1
[4]  456         10                 1
[5]  789          6                 1

マトリックス A の各 UPC の day1 をマトリックス B の数量で埋めたいと考えています。問題は、B に各 UPC の複数のインスタンスがあり、それらをループして、次に配置する合計数量を取得できないことです。各upc。

だから私が欲しいのはこれです..(これは完全に記入されます.2日目から52日目..他の日をループすることで、小さくて扱いやすいです)

A:  
     [upc]  [day1]    [day2]     ...    day52 
[1]  123     13        NA                 NA
[2]  456     10        NA                 NA
[3]  789     11        NA                 NA

ループせずにこれを達成できる関数を知っていますか?

4

2 に答える 2

2

関数Aを使用して行列を作成できます。tapply

> B <- data.frame(
+   upc=c(123,123,789,456,789,999,999,999),
+   quantity=c(11,2,5,10,6,10,3,3),
+   day=c(1,1,1,1,1,1,2,2)
+ )
> tapply( B$quantity, B[,c('upc','day')], FUN=sum )
     day
upc    1  2
  123 13 NA
  456 10 NA
  789 11 NA
  999 10  6
> 

B 行列が非常に大きい場合は、それをffオブジェクト (ff パッケージ) として保存し、それを使用ffrowapplyしてチャンクで保存することを検討できます。

于 2013-09-03T03:23:13.157 に答える