基于多列的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值和其他列
- 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