2017-03-22 15 views
0

最近Pythonで同じ問題についてこの記事を書いたが、Rでどのようなオプションが利用できるのか興味がある。これを少し楽にすることができました。 How to tell if a value changed over dimension(s) in Pandas いくつかの顧客データがある日付にあって、たとえば住所が変更されたかどうかを確認したいとします。その日以上。理想的には、変更が発生した2つの列を新しい表にコピーするか、合計変更量のメトリックを取得するだけです。私は値がRより大きく変更されたかどうかを確認する方法R

Date , Customer , Address 
12/31/14, Cust1, 12 Rocky Hill Rd 
12/31/15, Cust1, 12 Rocky Hill Rd 
12/31/16, Cust1, 14 Rocky Hill Rd 
12/31/14, Cust2, 12 Testing Rd 
12/31/15, Cust2, 12 Testing Ln 
12/31/16, Cust2, 12 Testing Rd 

のようなテーブルを持っていた場合

だから、私は12/31/15と12/31/16との間ロッキーヒルRdのbetween12お客様1の変更2変更のカウント、で終わるだろうCust2の変更は12/31/14から12/31/15の間です。

理想的には私はこの

​​

あるいは単に変更の合計数は、素晴らしいことだようにテーブルを得ることができます。何か案は?理想的には、これ以上の日付、おそらくそれらの日付にわたる複数の変更、さらに潜在的な追加の列があります。実際、各列の日付期間にわたる顧客レコードの変更の合計だけで十分です。

答えて

2

あなたは新しいテーブルの列などの変更の日付範囲とカウントを取得するためにdplyrgroup_bysummariseを使用することができます。

library(dplyr) 
df %>% 
    group_by(Customer) %>% 
    summarise(dates = sprintf("%s to %s", min(Date), max(Date)), 
      change.count = length(unique(Address)) - 1) 

結果:私たちが展開されますどのように

# A tibble: 2 × 3 
    Customer    dates change.count 
    <chr>    <chr>  <dbl> 
1 Cust1 12/31/14 to 12/31/16   1 
2 Cust2 12/31/14 to 12/31/16   1 
+0

任意の考えをこの解決策は、異なる日付での複数の住所変更を考慮に入れますか?私は提案されたソリューションは、データセット(および変更を考慮する固有のアドレス)の最小と最大の日付の日付の列を提供すると思いますが、私は20行のそれぞれが特定の日付としてアドレスを表すと言っていた場合私はしたいアドレスが変更前と変更された場所を知ることができます。私が知っているこの方法は、アドレスは4日と言うと静的で、5日と6日の間にどこかで変更されました。 – sc305495

1

住所の合計数については、顧客IDで集計できます。

aggregate(Data$Address, by=list(Data$Customer), function(x) length(unique(x))) 
    Group.1 x 
1 Cust1 2 
2 Cust2 2 

これは、アドレスのです。 の番号を取得するには、から1を引いてください。

関連する問題