如何有效地将一个data.frame的元素匹配到另一个?

时间:2015-11-11 20:59:14

标签: r performance dataframe

示例数据

考虑以下两个data.frames作为示例

set.seed(12)
d1 = cbind(
   expand.grid(1:4,LETTERS[1:3]),
   rnorm(12,10,1)
)[sample(1:12),]

d2 = as.data.frame(
       cbind(
          sample(c(1,2,4),900, replace=TRUE),
          sample(LETTERS[1:3],900,replace=TRUE)
       )[sample(1:900),]
     )

names(d1) = c("x","y","z")
names(d2) = c("x","y")

d1很小,包含xy的所有可能组合,并包含z变量。 d2要长得多,不一定包含xy的所有可能组合,并且不包含z变量。在这两个变量中,xy的组合没有逻辑顺序(如示例所示)。

目标

如何根据zd1的组合,将d2变量的值从x输入y

糟糕的解决方案

d2$z = 0
for (x in unique(d1$x))
{
  for (y in unique(d1$y))
  {
    d2$z[d2$x == x & d2$y == y] = d1$z[d1$x == x & d1$y == y]
  }
}
head(d2)
  x y         z
1 2 B  9.727704
2 1 C  9.893536
3 2 A 11.577169
4 1 A  8.519432
5 4 C  8.706118
6 2 B  9.727704

但是,当data.frames为几百万行时,它非常慢。此外,它不是很灵活。

有更好的选择吗?

0 个答案:

没有答案