2017-03-09 17 views
0

私は住宅販売と12000個のobsと20個の変数を持つデータフレームを持っています。私はお互いの30日以内に同じ住所と販売日を持つ販売を取り除こうとしています。その理由は、データの視覚的検査により、売り上げがMLSによる誤差を記録する可能性が高いとされる相互に30日以内に、これらの「重複」販売が明らかになったことです。したがって、私は回帰分析にそれらを含めていません。私は販売日の基準の範囲を作成するときに役立つように、日付を数値として残しました。これらは、私のデータフレームの2つの関連列です:私は、互いから30日以内に販売日を持っているすべての重複アドレスを検索して、データフレームR - データフレーム内の2つの基準に基づいて行を削除します

soからそれらを削除しようとしています

Address  SellingDat 
120 N.Main 41540 
305 S.Hill 42530 
2243 Ridge 40002 
120 N.Main 41530 

私は次のようにしようとしましたが、ユニークな値を持つ新しいデータフレームを作成するという基本的なアイデア以外のことを十分に理解していないのです。

data2 <- ddply(data, .(Address, SellingDat), unique) 

アドバイスやアドバイスをいただければ幸いです。私はこれに関連するディスカッションを読んだことがありますが、私がやろうとしていることに基づいてどのように申請するかを理解することはできません。私はRの初心者です。何よりもコードの仕組みを学びたいだけでなく、動作するコードを持つだけではありません。ありがとうございました!

+1

もう少し具体的にする必要があると思います。あなたは「データフレームからそれらを削除する」と言っています - 両方を削除したいのですか? 1つを保つなら、どちらか? 1つの住所に3つの販売日がある場合(20日ごと) - 最初の住所の40日後であっても最後の住所を削除しますか? – Gregor

+0

うまくいけば、これは明確にするのに役立ちます。すべての行を削除します.1つの住所に複数の販売(行)があり、販売日(列)が別の販売日から30日以内です。私は信頼できない観測と考えられるので、2つの行のどちらかを保持したくない。 3つの販売日のシナリオに答えるには、基準が「別の販売日の30日以内」であるため、3をすべて削除します。私はあなたがそこに着いていることを理解していますが、私の場合は心配するつもりはありません。ありがとうございます – JustinS

+0

これは大きなコードのほんの一部です。その目的は、データセットの「人間」エラーをチェックするための「広範な」ストロークの方法のようなものです。私は視覚的にデータを調べるときにこれを行う必要があることを認識しました。 1軒の家には、販売価格、ベッドルーム数、またはバスルーム数が各販売記録の間で大きく異なる1ヶ月以内に3件のエントリがある可能性があります。 – JustinS

答えて

0

私のコメントに対するあなたの応答は、これを非常に簡単に保ちます。ここではいくつかの少し大きめのサンプルデータです:

data = data.frame(
    Address = c('a', 'b', 'b', 'b', 'b', 'c', 'c', 'd', 'd'), 
    SellingDat = c(1, 1, 10, 50, 90, 10, 20, 1, 100) 
) 
data 
# Address SellingDat 
# 1  a   1 
# 2  b   1 
# 3  b   10 
# 4  b   50 
# 5  b   90 
# 6  c   10 
# 7  c   20 
# 8  d   1 
# 9  d  100 

その後、我々は、住所によって、計算にdplyrを使用して、以前との違いと次の販売日にすることができます。その後、前と次の販売日が30日以上離れている行だけをフィルタリングします。

library(dplyr) 

data %>% group_by(Address) %>% 
    arrange(SellingDat) %>% 
    mutate(time_to_next = c(diff(SellingDat), NA), 
      time_from_last = c(NA, diff(SellingDat))) %>% 
    filter(coalesce(time_to_next, Inf) > 30 & coalesce(time_from_last, Inf) > 30) %>% 
    select(-time_to_next, -time_from_last) %>% 
    arrange(Address, SellingDat) 
# Source: local data frame [5 x 2] 
# Groups: Address [3] 
# 
# Address SellingDat 
# <fctr>  <dbl> 
# 1  a   1 
# 2  b   50 
# 3  b   90 
# 4  d   1 
# 5  d  100 

合体は、欠損値を置き換えますので、私は欠損値が保持されていることを確認するためにInfと合体します。

+0

ありがとう!私はあなたの時間と説明に非常に感謝しています。 – JustinS

関連する問題