我有一个家庭销售数据框和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的新手,并且比任何想要学习代码如何工作的东西更多,而不仅仅是有一段有效的代码。谢谢!
答案 0 :(得分: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
Coalesce替换缺失值,因此我与Inf
合并以确保保留缺失值。