2

フォームのトランザクション データのデータ フレームがあります。

transactions <- data.frame(transaction=c("T1","T2","T2","T3","T3","T3"),sku=c("item_a","item_b","item_c","item_a","item_b","item_d"))

これは私にこれを与えます

  transaction    sku
1          T1 item_a
2          T2 item_b
3          T2 item_c
4          T3 item_a
5          T3 item_b
6          T3 item_d

出力として取得したいのは、次のデータ フレームです。

output <- data.frame(transaction=c("T1","T2","T3"),sku=c("item_a","item_b item_c","item_a item_b item_d"))

それはこのように見えます

  transaction                  sku
1          T1               item_a
2          T2        item_b item_c
3          T3 item_a item_b item_d

最初に元のデータ フレームを transactions$transaction で分割するなど、さまざまなアプローチを試みましたが、結果のリストから sku データを抽出するのに苦労しました。正しい方向へのポインタは大歓迎です。

編集:出力データフレームのタイプミスが修正されました。ジュバのおかげです。

4

4 に答える 4

4

これは を使用すると非常に簡単data.tableで、リストの列を印刷する優れた方法があります

library(data.table)
DT <- data.table(transactions)

DT[,list(sku = list(sku)) ,by=transaction]
##    transaction                  sku
## 1:          T1               item_a
## 2:          T2        item_b,item_c
## 3:          T3 item_a,item_b,item_d

それらを一緒に貼り付けたい場合は、次のこともできます

DT <- data.table(transactions)
DT[,list(sku = paste(sku, collapse = ', ')) ,by=transaction]
   transaction                  sku
1:          T1               item_a
2:          T2        item_b,item_c
3:          T3 item_a,item_b,item_d

sku各トランザクションのリストではなく、文字ベクトルになります

于 2013-02-13T23:04:46.793 に答える
2

plyrとの使用summarise

require(plyr)
ddply(transactions, .(transaction), summarise, sku=paste(sku, collapse = " "))

#  transaction                  sku
# 1          T1               item_a
# 2          T2        item_b item_c
# 3          T3 item_a item_b item_d
于 2013-02-13T23:07:26.757 に答える
1

オプションに追加するために、これはベースRでも簡単ですaggregate

aggregate(sku ~ transaction, transactions, paste, collapse = " ")
  transaction                  sku
1          T1               item_a
2          T2        item_b item_c
3          T3 item_a item_b item_d
于 2013-02-14T02:08:02.553 に答える
1

plyr代わりに使用:

library(plyr)
new_trans <- ddply(
  transactions,
  .(transaction),
  transform,
  sku=paste0(sku, collapse=" ")
  )
new_trans <- unique(new_trans)
print(new_trans)
于 2013-02-13T23:05:44.193 に答える