1

Bill_Number、Item_Name、Quantity という変数を持つデータセットがあります。1 つの Bill_Number の下に複数の Item_Name を含めることができます。Bill_Number と Quantity で要約しようとしています。ここで、Item_Names は請求書番号ごとに 1 つの変数に連結されます。ここでの解決策:いくつかの行変数を組み合わせると、限定された事前定義されたフレーム(以下に示すように)でうまく機能しますが、何百ものItem_Namesがあります。これを行う簡単な方法があると確信しています。誰でも助けてもらえますか?

データ (サンプルのみ):

BillN<-c('B1','B1','B1','B1','B2','B2','B2','B2','B3','B3','B3','B3')

Item_Name<-c('Prod A','Prod B','Prod C','Prod D','Prod A','Prod B','Prod C','Prod D','Prod A','Prod B','Prod C','Prod D') # going on to Product(n)

Quantity<-c(1,2,1,2,1,2,1,1,1,2,1,1)

出力: 使用ply::ddply

ddply(within(Dummy1, {
  Item_Name <- ifelse(Item_Name %in% c('Prod A','Prod B','Prod C'), 'Prod A + Prod B + Prod C', 'Prod D')
}), .(BillN, Item_Name), summarise, Count=sum(Quantity))

これは、「製品 D」が別の行であることに依存しますが、特定の番号のすべての製品とその請求書番号の全体の数量の組み合わせが必要です。

必要な出力は次の形式です。

  • ビルN | アイテム名 | 量
  • B1 | 製品 A + 製品 B + 製品 C + 製品 D | 製品 4
  • B2 | 製品 A + 製品 B + 製品 C + 製品 D | 製品 4
  • B3 | 製品 A + 製品 B + 製品 C + 製品 D | 製品 4
  • 上記のコードから得られる出力は次のとおりです。

  • ビルN | アイテム名 | 量
  • B1 | 製品 A + 製品 B + 製品 C | 4
  • B1 | 製品 D | 2
  • B2 | 製品 A + 製品 B + 製品 C | 4
  • B2 | 製品 D | 2
  • B3 | 製品 A + 製品 B + 製品 C | 4
  • B3 | 製品 D | 2
  • シナリオを拡張すると、各 Item_Name の Brand、Category、Sub_category などの変数と、それをさらに合計するための数値変数としての Sales_Amount があるとどうなりますか?

    さらに詳しい情報が必要な場合や質問がある場合はお知らせください。

    ありがとう、ラウル

    4

    2 に答える 2

    1

    data.tableパッケージを使用した簡単な解決策は次のとおりです。

    Step1: 作成data.table

    library(data.table)
    
    DT <- data.table(
      BillN=c('B1','B1','B1','B1','B2','B2','B2','B2','B3','B3','B3','B3'),
      Item_Name=c('Prod A','Prod B','Prod C','Prod D','Prod A','Prod B','Prod C','Prod D','Prod A','Prod B','Prod C','Prod D'), # going on to Product(n)
      Quantity=c(1,2,1,2,1,2,1,1,1,2,1,1)
    )
    

    ステップ 2: 適切なキーを設定します。

    setkey(DT,BillN)
    

    ステップ 3: 文字列ベクトルItem_Nameが ではないことを確認しますfactor

    DT[,Item_Name := as.character(Item_Name)]
    

    Step4: 操作を行うkey

    DT[,list(Item_Name =paste(Item_Name,collapse=" + "),
             Quantity=sum(Quantity)),
       by=key(DT)]
    

    結果をそのまま使用することも、行ごとに折りたたむこともできます。これは簡単です!!

    于 2014-04-23T02:39:08.050 に答える
    0

    これは、予想される出力が望むように、Quantity変数 byBillNと s のカウントの両方を合計する例です。BillN

    Dummy1 <- data.frame(BillN, Item_Name, Quantity)
    
    ldply(by(Dummy1, Dummy1$BillN, simplify=TRUE, FUN=function(x) {
    
      BillN <- x[1,]$BillN
      Quantity <- sum(x$Quantity)
      Item_Name <- paste(as.character(unique(x$Item_Name)), sep="", collapse=" + ")
      BillCt <- nrow(x)
    
      return(data.frame(BillN, Item_Name, Quantity, BillCt))
    
    }))[2:5]
    
    ##  BillN                         Item_Name Quantity BillCt
    ## 1    B1 Prod A + Prod B + Prod C + Prod D        6      4
    ## 2    B2 Prod A + Prod B + Prod C + Prod D        5      4
    ## 3    B3 Prod A + Prod B + Prod C + Prod D        5      4
    
    于 2014-04-23T02:38:11.170 に答える