【发布时间】:2015-05-13 07:00:59
【问题描述】:
我需要帮助解决我无法解决的合并(vlookup)问题。 我有 2 个要合并的数据框,此外它们还有不同的列名。我的真实数据集有很多列,这就是为什么我很难想出一个解决方案。 我已经尝试过合并功能,但我无法弄清楚如何在具有不同名称的多个列上执行此操作。我想明确指定 列名使用类似:
output <- merge(df1, df.vlookup, by.x=????, by.y=???, ) #just where I am today
这是一个非常简单的例子
id<-c(2,4,6,8,10,12,14,16,18,20,22,24,26,28)
bike <- c(1,3,2,1,1,1,2,3,2,3,1,1,1,1)
size <- c(1,2,1,2,1,2,1,2,1,2,1,2,1,2)
color <-c (10,11,13,15,12,12,12,11,11,14,12,11,10,10)
price <- c(1,2,2,2,1,3,1,1,2,1,2,1,2,1)
df1 <- data.frame(id,bike,size,color,price)
id bike size color price
1 2 1 1 10 1
2 4 3 2 11 2
3 6 2 1 13 2
4 8 1 2 15 2
5 10 1 1 12 1
6 12 1 2 12 3
7 14 2 1 12 1
8 16 3 2 11 1
9 18 2 1 11 2
10 20 3 2 14 1
11 22 1 1 12 2
12 24 1 2 11 1
13 26 1 1 10 2
14 28 1 2 10 1
b1<-c(1,2,3)
b2<-c("Alan", "CCM", "Basso")
s1 <- c(1,2)
s2 <- c("L","S")
c1<-c(10,11,12,13,14,15)
c2 <-c("black","blue","green","red","pink")
p1<- c(1,2,3)
p2<- c(1000,2000,3000)
#trick for making a dataframe with unequal vector length
na.pad <- function(x,len){
x[1:len]
}
makePaddedDataFrame <- function(l,...){
maxlen <- max(sapply(l,length))
data.frame(lapply(l,na.pad,len=maxlen),...)
}
df.vlookup <- makePaddedDataFrame(list(b1=b1,b2=b2,s1=s1,s2=s2,c1=c1,c2=c2,p1=p1,p2=p2))
> df.vlookup
b1 b2 s1 s2 c1 c2 p1 p2
1 1 Alan 1 L 10 black 1 1000
2 2 CCM 2 S 11 blue 2 2000
3 3 Basso NA <NA> 12 green 3 3000
4 NA <NA> NA <NA> 13 red NA NA
5 NA <NA> NA <NA> 14 pink NA NA
6 NA <NA> NA <NA> 15 <NA> NA NA
这是我想最终得到的数据框:
> df.final
id bike b2 size s2 color c2 price
1 2 1 Alan 1 L 10 black 1
2 4 3 Basso 2 S 11 blue 2
3 6 2 CCM 1 L 13 red 2
4 8 1 Alan 2 S 15 #N/A 2
5 10 1 Alan 1 L 12 green 1
6 12 1 Alan 2 S 12 green 3
7 14 2 CCM 1 L 12 green 1
8 16 3 Basso 2 S 11 blue 1
9 18 2 CCM 1 L 11 blue 2
10 20 3 Basso 2 S 14 pink 1
11 22 1 Alan 1 L 12 green 2
12 24 1 Alan 2 S 11 blue 1
13 26 1 Alan 1 L 10 black 2
14 28 1 Alan 2 S 10 black 1
非常感谢您对此的帮助...
【问题讨论】: