我有两个数据帧。 1个关于个人的数据,包括他们的街道名称和门牌号,但不包括他们的房屋大小。另一个有关每个房子的信息,包括街道名称和房屋号码和房屋大小,但没有关于住在那个房子里的人的数据。我想将大小信息添加到第一个数据框作为新列,以便我可以看到每个人的房屋大小。
我有超过20万人和大约10万间房屋和我迄今为止尝试过的方法(减少每个人的第二个数据框)非常缓慢。他们是一个有效的方法吗?谢谢。
答案 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>