1

私は多くのスレッドを読みましたが、私の質問が以前に尋ねられたとは思いません. 私はdata.frame顧客に表示される広告に関連する R を持っています:..私は多くの顧客、8 つの異なる製品を持っています..これは単なるサンプルです

mydf <- data.frame(Cust = c(1, 1), age = c(24, 24), 
    state = c("NJ", "NJ"), Product = c(1, 1), cost = c(400, 410), 
    Time = c(35, 25), Purchased = c("N", "Y"))
mydf
#   Cust age state Product cost Time Purchased
# 1    1  24    NJ       1  400   35         N
# 2    1  24    NJ       1  410   23         Y

そして、私はそれをそのように見えるように変換したい...

Cust | age | state | Product | cost.1 | time.1 | purch.1 | cost.2 | time.2 | purch.2
   1 |  24 |    NJ |       1 |    400 |     35 |       N |    410 |     23 |       Y

これどうやってするの?各顧客には、年齢、州、その他いくつかの静的変数がいくつかあります...そして、特定の顧客に提示された各オファーに関連付けられた詳細、オファーの製品番号、コスト、時間、そして彼らがそれを購入した場合... 私は、分析を実行するために、顧客ごとにこれらすべてを 1 行にまとめたいと考えています。

製品の数は 7 が上限ですが、一部の顧客では 1 から 7 の範囲であることに注意してください。

実際に表示するサンプル コードはありません。関数を使用してみaggregateましたが、集計したり、SUM を実行したりしたくありません。私はいくつかの結合をしたいだけです。研究によると、cbind、およびtapply関数が役立つ可能性があります。

ご協力ありがとうございました。私はRに非常に慣れていません。

4

1 に答える 1

0

基本的に、データの「長い」から「広い」への再形成を求めています。

ID 変数として「Cust」、「age」、「state」、「Product」を使用しているように見えます。ただし、実際の「時間」変数はありません (上記の ID によるレコードの連続カウントのような「時間」)。ただし、そのような変数は簡単に作成できます。

mydf$timevar <- with(mydf, 
                     ave(rep(1, nrow(mydf)), 
                         Cust, age, state, Product, FUN = seq_along))
mydf
#   Cust age state Product cost Time Purchased timevar
# 1    1  24    NJ       1  400   35         N       1
# 2    1  24    NJ       1  410   23         Y       2

そこからreshape、ベース R の関数を使用すると、これは非常に簡単です。

reshape(mydf, direction = "wide", 
        idvar=c("Cust", "age", "state", "Product"),
        timevar = "timevar")
#   Cust age state Product cost.1 Time.1 Purchased.1 cost.2 Time.2 Purchased.2
# 1    1  24    NJ       1    400     35           N    410     23           Y
于 2014-03-30T05:22:07.763 に答える