«Умнее» действительно зависит от ваших данных, которых у нас нет.но
df1 <- data.frame(
X1 = 1:10,
id = letters[1:10]
)
df2 <- data.frame(
X2 = 10:1,
X3 = letters[11:20]
)
rownames(df2) <- df1$id
df2 <- df2[sample.int(10),]
cbind(df1,df2[match(df1$id,rownames(df2)),])
Редактировать: ответ Витошки тот, который вы ищете.Если бы я потрудился посмотреть справочные файлы ?merge
, я бы тоже это знал ...
Я оставляю здесь свое решение на тот случай, если кому-то понадобится быстрая альтернатива слиянию:
> system.time(replicate(1000,cbind(df1,df2[match(df1$id,rownames(df2)),])))
user system elapsed
0.57 0.00 0.57
> system.time(replicate(1000,merge(df1,df2,by.x="id",by.y="row.names")))
user system elapsed
2.36 0.02 2.37