使用R

时间:2015-07-29 16:11:04

标签: r

我正在寻找一种方法,使用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功能已经做到了这一点。

3 个答案:

答案 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