5

多くの列と行を含むデータセット(Purchase.df)があります。この質問の重要な変数名は、「Customer」、「OrderDate」、「DateRank」(日付をランク付けして最小の日付を見つけることができるようにする)、および「BrandName」です。以下は私が取り組んでいるものの非常に小さなサンプルです:(私はこのウェブサイトに不慣れなので、下に貼り付けたものがうまくいくことを願っています)

Purchase.df<-structure(list(Customer = c(10071535L, 10071535L, 10071535L, 
10071535L, 10071535L, 10071535L, 10071711L, 10071711L, 10071711L, 
10071711L, 10071711L, 10071711L, 10071711L, 10071711L, 10071711L, 
10071711L, 10071711L, 10071711L, 10072059L, 10072059L, 10072059L, 
10072113L, 10072113L, 10072113L, 10072113L, 10072113L, 10072113L, 
10072113L), BrandName = structure(c(1L, 2L, 2L, 2L, 3L, 3L, 2L, 
2L, 2L, 2L, 3L, 3L, 1L, 3L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 3L, 3L, 3L, 3L), .Label = c("X", "Y", "Z"), class = "factor"), 
OrderDate = structure(c(14L, 14L, 15L, 16L, 19L, 20L, 11L, 
18L, 5L, 6L, 1L, 17L, 21L, 22L, 23L, 8L, 10L, 13L, 7L, 9L, 
12L, 4L, 4L, 2L, 2L, 2L, 3L, 3L), .Label = c("1/17/2011 0:00", 
"1/19/2010 0:00", "1/25/2010 0:00", "1/4/2010 0:00", "10/22/2010 0:00", 
"11/15/2010 0:00", "11/23/2011 0:00", "12/14/2011 0:00", 
"12/16/2011 0:00", "2/7/2012 0:00", "3/16/2010 0:00", "3/21/2012 0:00", 
"4/16/2012 0:00", "4/27/2012 0:00", "5/16/2012 0:00", "5/30/2012 0:00", 
"5/5/2011 0:00", "6/1/2010 0:00", "6/12/2012 0:00", "7/3/2012 0:00", 
"8/1/2011 0:00", "8/16/2011 0:00", "9/19/2011 0:00"), class = "factor"), 
DateRank = c(18.5, 18.5, 20, 21, 24, 25, 15, 23, 9, 10, 1, 
22, 26, 27, 28, 12, 14, 17, 11, 13, 16, 7.5, 7.5, 3, 3, 3, 
5.5, 5.5)), .Names = c("Customer", "BrandName", "OrderDate", 
"DateRank"), row.names = c(NA, -28L), class = "data.frame")

この大きなデータセット(subset.df)のサブセットを作成しました。これは、各顧客の最初のOrderDateを検索し、購入したブランドを教えてくれます。これを行うために次のコードを使用しました。

subset1<-split(Purchase.df,Purchase.df$Customer)
subset2<-lapply(split(Purchase.df,Purchase.df$Customer), function(chunk) chunk[which(chunk$DateRank==min(chunk$DateRank)),])
subset.df<-do.call(rbind, as.list(subset2))

ここで、最初の注文日にブランドXを注文した顧客を特定し、最初の注文日にブランドXを購入した顧客のすべての注文日を含む新しいデータセット(BigSubset.df)を作成します。

次のようになります。

Customer    BrandName   OrderDate   DateRank
10071535    X   4/27/2012 0:00  18.5
10071535    Y   4/27/2012 0:00  18.5
10071535    Y   5/16/2012 0:00  20
10071535    Y   5/30/2012 0:00  21
10071535    Z   6/12/2012 0:00  24
10071535    Z   7/3/2012 0:00   25
10072059    X   11/23/2011 0:00 11
10072059    X   12/16/2011 0:00 13
10072059    X   3/21/2012 0:00  16
10072113    X   1/4/2010 0:00   7.5
10072113    Y   1/4/2010 0:00   7.5
10072113    Y   1/19/2010 0:00  3
10072113    Z   1/19/2010 0:00  3
10072113    Z   1/19/2010 0:00  3
10072113    Z   1/25/2010 0:00  5.5
10072113    Z   1/25/2010 0:00  5.5

行数が等しくないため、Purchase.dfからBigSubset.dfを作成しようとすると、Rに小さいデータセットを参照させることができないようです。私はグーグルで検索しましたが、答えは見当たりませんでしたので、これがRで可能かどうかさえわかりません。あなたの考えを教えてください。

4

1 に答える 1

2

誤解しているかもしれませんが、これはうまくいくと思います。

Xfirst <- as.vector(subset.df[subset.df$BrandName == "X", ])$Customer
BigSubset.df <- Purchase.df[Purchase.df$Customer %in% Xfirst, ]

あなたの例では、顧客10072113の日付は2010年1月19日ランク3でしたが、以前の2010年1月4日は7.5ランクだったため、日付ランクにバグがあると思います。(補足、関数では、の代わりにchunk使用できます。これはより効率的だと思います。)which.min(chunk$DateRank)which(chunk$DateRank==min(chunk$DateRank))

于 2012-07-18T20:23:04.420 に答える