我正在寻找一种方法,使用R找到与主题属性最接近的可比房地产销售。我需要输出以包括不同变量之间的距离。
我已尝试使用dist
函数,但它会生成一个输出,将矩阵中的所有行相互比较。理想情况下,我希望将单个主题与销售列表进行比较,并将最接近匹配的输出与列出的每个变量的距离进行比较。
示例数据;
销售
parcel square_feet age quality
R100 2500 10 4
R200 1800 15 3
R300 2200 8 5
受试者
R400 1900 14 4
理想情况下,我希望输出类似这样的内容
parcel sq_ft_dist age_dist qual_dist
R200 100 1 1
R300 300 6 1
R100 600 4 0
修改 我正在寻找包裹之间的欧几里德距离。
EDIT2
为了澄清我的问题,我可以使用dist
函数获得每行之间的欧几里德距离。它返回矩阵中每对的值。这很棒,但它比我需要的更多,输出矩阵对于大数据集来说可能会变得非常大。我只需要主题和其他行之间的距离。我想我可以从dist
的输出中拉出我感兴趣的距离,然后手动计算变量之间的距离。我一直在问,希望有一个R功能已经做到了这一点。
答案 0 :(得分:2)
我认为统计匹配对这项任务很有帮助。也许Mahalanobis距离或倾向得分匹配。这将有助于您避免评论者指出的问题,即您必须找到一种方法来组合您的三个欧几里德距离。查看包MatchIt:
http://r.iq.harvard.edu/docs/matchit/2.4-20/matchit.pdf
抱歉这个伪答案;我没有足够的代表发表评论:/
答案 1 :(得分:1)
也许dplyr
可以为您提供帮助。我将您的parcel R400添加为数据框(df)中的最后一个条目
library(dplyr)
df <- df %>%
group_by(parcel) %>%
summarise(sqftdist = df[4,2]-square_feet,
agedist = df[4,3]-age,
qualdist = df[4,4]-quality)
> df
Source: local data frame [4 x 4]
parcel sqftdist agedist qualdist
1 R100 -1100 4 0
2 R200 -400 -1 1
3 R300 -800 6 -1
4 R400 0 0 0
以下是数据框:
> dput(df)
structure(list(parcel = structure(1:4, .Label = c("R100", "R200",
"R300", "R400"), class = "factor"), sqftdist = c(-1100L, -400L,
-800L, 0L), agedist = c(4L, -1L, 6L, 0L), qualdist = c(0L, 1L,
-1L, 0L)), .Names = c("parcel", "sqftdist", "agedist", "qualdist"
), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"
), drop = TRUE)
答案 2 :(得分:0)
如果它可以帮助其他人,我发现了一个功能,它正是我正在寻找的dist2
包中的flexclust
。
它以与dist
相同的方式计算距离,但不是在单个矩阵中对每个观测值进行配对,而是给它第二个向量或矩阵来比较第一个到。
阅读它here。