2017-03-09 174 views
0

我有一個帶有房屋銷售和12000個觀測值和20個變量的數據框。我正在嘗試在30天內刪除具有相同地址和銷售日期的任何銷售。原因在於數據的視覺檢查顯示這些「重複」銷售在每個其他銷售的30天內可能由MLS記錄錯誤。因此,我不包括他們在迴歸分析。在創建銷售日期標準範圍時,我已將日期保留爲數字。這是我的數據幀的兩個相關列:R - 根據數據框中的兩個條件刪除行

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

我試圖找到具有在30天內發售日期從對方重複的地址,然後從數據幀

所以刪除遠遠我已經嘗試過使用以下內容,但不完全瞭解它在做什麼,而不是使用唯一值創建新數據框的基本概念。

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

任何提示或建議將不勝感激。我已閱讀過與此相關的討論,但沒有找到任何我可以根據我正在嘗試做的事情來弄清楚如何申請的內容。我是R中的新手,並且比任何事情都更想學習代碼的工作方式,而不是隻有一段代碼能夠工作。謝謝!

+1

我認爲你需要更具體一點。你說「從數據框中刪除它們」 - 你想刪除它們還是保留一個?如果保留一個,哪一個?如果一個地址有3個銷售日期,相隔20天 - 如果要刪除最後一個地址,即使它是第一個地址後的40天,該怎麼辦? – Gregor

+0

希望這將有助於澄清。刪除所有行,其中:一個地址有多個銷售(行)和一個銷售日期(列)在另一個銷售日期的30天內。我不想保留兩行中的任何一行,因爲它們被認爲是不可靠的觀察結果。要回答您的3個銷售日期方案,請刪除全部3個,因爲標準是「在另一個銷售日期的30天之內」。我明白你在那裏得到了什麼,但對我而言不會是一個問題。謝謝 – JustinS

+0

這只是較大代碼的一小部分。它的目的是檢查數據集中「人」錯誤的一種「寬泛」筆觸方法。我意識到我需要通過視覺觀察數據來做到這一點。一間房子可能在不到一個月的時間內有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