2017-03-09 156 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