[R] Add column to DF based on 2 columns in another DF

arun smartpink111 at yahoo.com
Tue Dec 10 16:02:09 CET 2013


Hi,
Try:
library(reshape2)
m1 <- melt(LookupTable,id.vars="Str")
m2 <- m1

res <- merge(MainDataFrame,m1,by.x=c("Str","index"),by.y=c("Str","variable"))
res[order(res$Str),c(3:6,1:2,7)]

#or
library(plyr)
colnames(m2)[-1] <- c("index","index_num")
 m2$index <- as.character(m2$index)
 join(MainDataFrame,m2,by=c("Str","index"))


A.K.


LookupTable <- read.table(header = TRUE, 
                   stringsAsFactors = FALSE, 
                   text="Str IND13 IND12 IND11 IND07 IND06 
                         1   517   529   562   562   567 
                         2   517   529   562   562   568 
                         3   517   529   562   562   567 
                         4   517   529   562   562   569 
                         5   517   529   562   562   567 
                         6   517   529   562   562   567 
                         7   517   529   562   562   560 
                         8   517   529   562   562   567 
                         9   517   529   562   562   567 
                         10   517   529   562   562   567") 


MainDataFrame <- read.table(header = TRUE, 
                          stringsAsFactors = FALSE, 
                          text="Pid YEAR MONTH  Fips Str index 
                            600250 2006     7  6037  1 IND06 
                            600250 2006     7  6037  2 IND06 
                            600250 2006     7  6037  3 IND06 
                            600250 2006     7  6037  4 IND06 
                            600250 2006     7  6037  5 IND06 
                            600353 2007     9 48097  6 IND07 
                            600772 2006     2  6039  7 IND06 
                            600947 2007     1 13207  7 IND07 
                            601055 2007     9 13315  8 IND07 
                            601103 2006     5 21093  10 IND06") 

MainDataFrame_New <- ?? 

#What is the best way to add a new column "index_num" to MainDataFrame that is populated with the 
#number corresponding to 'Str' and 'index' in LookupTable: 

#                             Pid YEAR MONTH  Fips Str index index_num 
#                             600250 2006     7  6037  1 IND06 567 
#                             600250 2006     7  6037  2 IND06 568 
#                             600250 2006     7  6037  3 IND06 567 
#                             600250 2006     7  6037  4 IND06 569 
#                             600250 2006     7  6037  5 IND06 567 
#                             600353 2007     9 48097  6 IND07 562 
#                             600772 2006     2  6039  7 IND06 560 
#                             600947 2007     1 13207  7 IND07 562 
#                             601055 2007     9 13315  8 IND07 562 
#                             601103 2006     5 21093  10 IND06 567



More information about the R-help mailing list