基于多列的R匹配

基于多列的R匹配,r,dataframe,matching,R,Dataframe,Matching,假设我有以下数据集,其作用类似于键 xy值 1210 1120 2130 1120 2300 我还有一个数据,有很多列,其中两列是x和y。我想创建一个与键匹配的列值,例如 x y值和其他列 1120 2130 2300 当匹配一列时,我只能使用匹配使其工作。如何扩展到多列匹配?您可以使用@MrFlick建议的merge: df.key <- data.frame( x=c(1,1,2,1,2), y=c(2,1,1,1,3), value=c(10,20,30,20,2

假设我有以下数据集,其作用类似于键

  • xy值
  • 1210
  • 1120
  • 2130
  • 1120
  • 2300
我还有一个数据,有很多列,其中两列是x和y。我想创建一个与键匹配的列值,例如

  • x y值和其他列
  • 1120
  • 2130
  • 2300

当匹配一列时,我只能使用匹配使其工作。如何扩展到多列匹配?

您可以使用@MrFlick建议的
merge

df.key <- data.frame(
  x=c(1,1,2,1,2),
  y=c(2,1,1,1,3),
  value=c(10,20,30,20,200))
##
df.add <- data.frame(
  x=c(1,2,2),
  y=c(1,1,3),
  value=c(20,30,300),
  a=rnorm(3),
  b=rpois(3,0))
##
> merge(
    x=df.key,
    y=df.add)
  x y value         a b
1 1 1    20 0.9246104 0
2 1 1    20 0.9246104 0
3 2 1    30 0.2685016 0
##
> merge(
    x=df.key,
    y=df.add,
    by=c("x","y"))
  x y value.x value.y          a b
1 1 1      20      20  0.9246104 0
2 1 1      20      20  0.9246104 0
3 2 1      30      30  0.2685016 0
4 2 3     200     300 -0.4174230 0

这似乎是一个
merge()
操作。我需要它,因为df.add最初没有value列,即df.add仍然可以正常工作;如上所述,
merge
默认情况下将在x和y上连接(在本例中)。我相信我现在已经了解了它的工作原理。我还有最后一个问题。当我在上面进行合并时,它会采用每一行的组合,因此它会添加一个额外的行。是否有一个命令要添加到合并中,以便在df.add之后返回尽可能多的行merging@Nitin奎师那我将更新我的答案来解决这个问题。
R> merge(
    x=df.key[!duplicated(df.key[,c(1:2)]),],
    y=df.add)
  x y value          a b
1 1 1    20 -1.0185211 0
2 2 1    30  2.7507656 0
3 2 3   200  0.3986168 0