Hi, R-listers, Failed, when I tried to merge df1 and df2 by "codetot" in df1 and "codetoto" in df2. I want to know the reason and how to merge them together. Data frames and codes I have used were listed as followed. Thanks a lot in advance. df1: popcode codetot p3need BCPy01-01 BCPy01-01-1 100.0000 BCPy01-01 BCPy01-01-2 100.0000 BCPy01-01 BCPy01-01-3 100.0000 BCPy01-02 BCPy01-02-1 92.5926 BCPy01-02 BCPy01-02-1 100.0000 BCPy01-02 BCPy01-02-2 92.5926 BCPy01-02 BCPy01-02-2 100.0000 BCPy01-02 BCPy01-02-3 92.5926 BCPy01-02 BCPy01-02-3 100.0000 BCPy01-03 BCPy01-03-1 100.0000 df2: popcode codetoto areasec BCPy01-01 BCPy01-01-1 0.5089434 BCPy01-01 BCPy01-01-2 0.6246381 BCPy01-01 BCPy01-01-3 0.4370059 BCPy01-02 BCPy01-02-1 0.9253052 BCPy01-02 BCPy01-02-1 0.6011810 BCPy01-02 BCPy01-02-2 0.6710850 BCPy01-02 BCPy01-02-2 0.7145839 BCPy01-02 BCPy01-02-3 0.9515256 BCPy01-02 BCPy01-02-3 0.6555006 BCPy01-03 BCPy01-03-1 0.8683875 code: new1<-merge(df1,df2,by=c("popcode","popcode"),all=T) # It is processed well. But, it is not what I want. new2<-merge(df1,df2,by=c("codetot","codetoto"),all=T) # this one failed. I exactly want to do that. Mao J-F IBCAS, AC [[alternative HTML version deleted]]
try this:> merge(df1, df2, by.x='codetot',by.y='codetoto', all=TRUE)codetot popcode.x p3need popcode.y areasec 1 BCPy01-01-1 BCPy01-01 100.0000 BCPy01-01 0.5089434 2 BCPy01-01-2 BCPy01-01 100.0000 BCPy01-01 0.6246381 3 BCPy01-01-3 BCPy01-01 100.0000 BCPy01-01 0.4370059 4 BCPy01-02-1 BCPy01-02 92.5926 BCPy01-02 0.9253052 5 BCPy01-02-1 BCPy01-02 92.5926 BCPy01-02 0.6011810 6 BCPy01-02-1 BCPy01-02 100.0000 BCPy01-02 0.9253052 7 BCPy01-02-1 BCPy01-02 100.0000 BCPy01-02 0.6011810 8 BCPy01-02-2 BCPy01-02 92.5926 BCPy01-02 0.6710850 9 BCPy01-02-2 BCPy01-02 92.5926 BCPy01-02 0.7145839 10 BCPy01-02-2 BCPy01-02 100.0000 BCPy01-02 0.6710850 11 BCPy01-02-2 BCPy01-02 100.0000 BCPy01-02 0.7145839 12 BCPy01-02-3 BCPy01-02 92.5926 BCPy01-02 0.9515256 13 BCPy01-02-3 BCPy01-02 92.5926 BCPy01-02 0.6555006 14 BCPy01-02-3 BCPy01-02 100.0000 BCPy01-02 0.9515256 15 BCPy01-02-3 BCPy01-02 100.0000 BCPy01-02 0.6555006 16 BCPy01-03-1 BCPy01-03 100.0000 BCPy01-03 0.8683875>On Thu, Apr 9, 2009 at 7:19 AM, Mao Jianfeng <jianfeng.mao at gmail.com> wrote:> Hi, R-listers, > > Failed, when I tried to merge df1 and df2 by "codetot" in df1 and "codetoto" > in df2. I want to know the reason and how to merge them together. Data > frames and codes I have used were listed as followed. Thanks a lot in > advance. > > df1: > popcode ? ? codetot ? p3need > BCPy01-01 BCPy01-01-1 100.0000 > BCPy01-01 BCPy01-01-2 100.0000 > BCPy01-01 BCPy01-01-3 100.0000 > BCPy01-02 BCPy01-02-1 ?92.5926 > BCPy01-02 BCPy01-02-1 100.0000 > BCPy01-02 BCPy01-02-2 ?92.5926 > BCPy01-02 BCPy01-02-2 100.0000 > BCPy01-02 BCPy01-02-3 ?92.5926 > BCPy01-02 BCPy01-02-3 100.0000 > BCPy01-03 BCPy01-03-1 100.0000 > > df2: > popcode ? ?codetoto ? areasec > BCPy01-01 BCPy01-01-1 0.5089434 > BCPy01-01 BCPy01-01-2 0.6246381 > BCPy01-01 BCPy01-01-3 0.4370059 > BCPy01-02 BCPy01-02-1 0.9253052 > BCPy01-02 BCPy01-02-1 0.6011810 > BCPy01-02 BCPy01-02-2 0.6710850 > BCPy01-02 BCPy01-02-2 0.7145839 > BCPy01-02 BCPy01-02-3 0.9515256 > BCPy01-02 BCPy01-02-3 0.6555006 > BCPy01-03 BCPy01-03-1 0.8683875 > > code: > new1<-merge(df1,df2,by=c("popcode","popcode"),all=T) # It is processed well. > But, it is not what I want. > new2<-merge(df1,df2,by=c("codetot","codetoto"),all=T) # this one failed. I > exactly want to do that. > > Mao J-F > IBCAS, AC > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?
I would suggest use the same column names for the common columns. Say, use "codetot" for both df1 and df2. Then you don't even have to specify by.x or by.y, merge will do it automatically. merge(df1,df2, all=TRUE). Otherwise you have to merge(df1,df2,by.x=c('popcode','codetot'),by.y=c('popcode','codetoto'),all=TRUE) They both produce popcode codetot p3need areasec 1 BCPy01-01 BCPy01-01-1 100 0.5089434 2 BCPy01-01 BCPy01-01-2 100 0.6246381 3 BCPy01-01 BCPy01-01-3 100 0.4370059 4 BCPy01-02 BCPy01-02-1 92.5926 0.9253052 5 BCPy01-02 BCPy01-02-1 92.5926 0.6011810 6 BCPy01-02 BCPy01-02-1 100 0.9253052 7 BCPy01-02 BCPy01-02-1 100 0.6011810 8 BCPy01-02 BCPy01-02-2 92.5926 0.6710850 9 BCPy01-02 BCPy01-02-2 92.5926 0.7145839 10 BCPy01-02 BCPy01-02-2 100 0.6710850 11 BCPy01-02 BCPy01-02-2 100 0.7145839 12 BCPy01-02 BCPy01-02-3 92.5926 0.9515256 13 BCPy01-02 BCPy01-02-3 92.5926 0.6555006 14 BCPy01-02 BCPy01-02-3 100 0.9515256 15 BCPy01-02 BCPy01-02-3 100 0.6555006 16 BCPy01-03 BCPy01-03-1 100 0.8683875 On Thu, Apr 9, 2009 at 6:19 AM, Mao Jianfeng <jianfeng.mao@gmail.com> wrote:> Hi, R-listers, > > Failed, when I tried to merge df1 and df2 by "codetot" in df1 and > "codetoto" > in df2. I want to know the reason and how to merge them together. Data > frames and codes I have used were listed as followed. Thanks a lot in > advance. > > df1: > popcode codetot p3need > BCPy01-01 BCPy01-01-1 100.0000 > BCPy01-01 BCPy01-01-2 100.0000 > BCPy01-01 BCPy01-01-3 100.0000 > BCPy01-02 BCPy01-02-1 92.5926 > BCPy01-02 BCPy01-02-1 100.0000 > BCPy01-02 BCPy01-02-2 92.5926 > BCPy01-02 BCPy01-02-2 100.0000 > BCPy01-02 BCPy01-02-3 92.5926 > BCPy01-02 BCPy01-02-3 100.0000 > BCPy01-03 BCPy01-03-1 100.0000 > > df2: > popcode codetoto areasec > BCPy01-01 BCPy01-01-1 0.5089434 > BCPy01-01 BCPy01-01-2 0.6246381 > BCPy01-01 BCPy01-01-3 0.4370059 > BCPy01-02 BCPy01-02-1 0.9253052 > BCPy01-02 BCPy01-02-1 0.6011810 > BCPy01-02 BCPy01-02-2 0.6710850 > BCPy01-02 BCPy01-02-2 0.7145839 > BCPy01-02 BCPy01-02-3 0.9515256 > BCPy01-02 BCPy01-02-3 0.6555006 > BCPy01-03 BCPy01-03-1 0.8683875 > > code: > new1<-merge(df1,df2,by=c("popcode","popcode"),all=T) # It is processed > well. > But, it is not what I want. > new2<-merge(df1,df2,by=c("codetot","codetoto"),all=T) # this one failed. I > exactly want to do that. > > Mao J-F > IBCAS, AC > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Jun Shen PhD PK/PD Scientist BioPharma Services Millipore Corporation 15 Research Park Dr. St Charles, MO 63304 Direct: 636-720-1589 [[alternative HTML version deleted]]
Seemingly Similar Threads
- split a character variable into several character variable by a character
- confusion on levels() function, and how to assign a wanted order to factor levels, intentionally?
- How to do automatical-plotting
- relative frequencies for hist()
- a decimal aligned column