R - 查找数据帧的特定行,然后将该行中的数据添加到另一个数据帧

时间:2014-11-15 22:54:44

标签: r dataframe

我有两个数据帧。 1个关于个人的数据,包括他们的街道名称和门牌号,但不包括他们的房屋大小。另一个有关每个房子的信息,包括街道名称和房屋号码和房屋大小,但没有关于住在那个房子里的人的数据。我想将大小信息添加到第一个数据框作为新列,以便我可以看到每个人的房屋大小。

我有超过20万人和大约10万间房屋和我迄今为止尝试过的方法(减少每个人的第二个数据框)非常缓慢。他们是一个有效的方法吗?谢谢。

2 个答案:

答案 0 :(得分:2)

使用@ jazzurro&#39的示例更大数据集的另一个选项是使用data.table

library(data.table)
setkey(setDT(df1), street, num)
setkey(setDT(df2), street, num)
df2[df1]
#     size     street num person
#1:  large  liliha st   3    bob
#2:     NA  mahalo st  32    dan
#3:  small  makiki st  15    ana
#4:     NA   nehoa st  11  ellen
#5: medium nuuanu ave   8  cathy

答案 1 :(得分:1)

这是我的建议。根据您在数据中描述的内容,我创建了一个示例数据。但是,请尝试从下次提供样本数据。当您提供样本数据和代码时,您更有可能获得帮助并让人们节省更多时间。您有两个关键变量来合并两个数据框,即街道名称和门牌号码。在这里,我选择将所有数据点保存在df1中。

df1 <- data.frame(person = c("ana", "bob", "cathy", "dan", "ellen"),
                  street = c("makiki st", "liliha st", "nuuanu ave", "mahalo st", "nehoa st"),
                  num = c(15, 3, 8, 32, 11),
                  stringsAsFactors = FALSE)

  #person     street num
#1    ana  makiki st  15
#2    bob  liliha st   3
#3  cathy nuuanu ave   8
#4    dan  mahalo st  32
#5  ellen   nehoa st  11

df2 <- data.frame(size = c("small", "large", "medium"),
                  street = c("makiki st", "liliha st", "nuuanu ave"),
                  num = c(15, 3, 8),
                  stringsAsFactors = FALSE)

#    size     street num
#1  small  makiki st  15
#2  large  liliha st   3
#3 medium nuuanu ave   8

library(dplyr)

left_join(df1, df2)

#      street num person   size
#1  makiki st  15    ana  small
#2  liliha st   3    bob  large
#3 nuuanu ave   8  cathy medium
#4  mahalo st  32    dan   <NA>
#5   nehoa st  11  ellen   <NA>