3

私は R の data.table パッケージを初めて使用します。data.table のバージョンは 1.8.2 です。

私のデータ テーブルには約 2,100 万行あるので、理想的には、データ テーブル メソッドを使用して問題を解決したいと考えています。以下は、サンプル データとコードです。

samp_data <- data.frame(user1 = c(24, 24, 24, 56, 75, 75),
                        user2 = c(43, 43, 57, 34, 61, 61),  
                        amount1 = c(1, 4, 3, 2, 6, 8), 
                        amount2 = c(4, 7, 9, 3, 5, 6), 
                        PURCH_DATE_1 = as.Date(c("2012-01-01", "2012-04-29", 
                        "2012-03-02", "2012-06-15", "2012-03-17", "2012-09-25")), 
                        PURCH_DATE_2 = as.Date(c("2012-04-01", "2012-01-25", 
                        "2012-05-21","2012-08-18", "2012-04-03", "2012-10-29")))
samp_data$DIFF_DAYS <- abs(as.numeric(samp_data$PURCH_DATE_1-
samp_data$PURCH_DATE_2))
samp_data_new<-data.table(samp_data)

元の 7 つの列を持つデータ テーブルを取得したいのですが、user1 列と user2 列に重複するペアがある場合、DIFF_DAYS 列に最小値を持つ行が保持されます。

あなたの何人かを私が望むものと混同していると仮定すると、以下のコードには目的の出力が含まれています。

samp_data_desired<-data.frame(user1=c(24,24,56,75),user2=c(43,57,34,61),
                              amount1=c(1,3,2,6),amount2=c(4,9,3,5),
                              PURCH_DATE_1=as.Date(c("2012-01-01","2012-03-02",
                              "2012-06-15","2012-03-17")),
                              PURCH_DATE_2=as.Date(c("2012-04-01","2012-05-21",
                              "2012-08-18","2012-04-03")),
                              DIFF_DAYS=c(91,80,64,17))

DT[, min(col1), by=user1] のようなアイデアを使用して、単純な集計を実行して各 user1 の平均、最小、最大を見つける方法は知っていますが、一意または重複した関数を正常に使用できませんでした。私は試した:

samp_data_check <- data.table(samp_data, key=c("user1", "user2", 
                            "amount1", "amount2", "PURCH_DATE_1",
                            "PURCH_DATE_2"))


samp_data_test <- samp_data_check[, unique(DIFF_DAYS), by=c("user1", 
                  "user2", "amount1", "amount2", "PURCH_DATE_1", 
                  "PURCH_DATE_2")]

いくつかのバリエーションがありますが、私はひどく混乱しているので、どんな助けも大歓迎です.

4

1 に答える 1