我有一个带有家庭销售和12000个obs和20个变量的数据框架。我试图在彼此30天内删除任何具有相同地址和销售日期的销售。原因是对数据的目视检查揭示了彼此销售的30天内这些"重复"销售可能是MLS记录错误。因此,我没有将它们包括在回归分析中。在创建销售日标准的范围时,我将日期作为数字提供了帮助。这是我的数据框架的两个相关列:
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中的新手,比任何东西都想了解代码的工作原理,而不仅仅是有效的代码。谢谢!
您对我的评论的回答使这非常容易。这是一些稍大的样本数据:
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
colesce替代了缺失值,因此我与Inf
合并以确保保留缺失值。