合并返回重复行

3

I have a data frame df1:

Column1   Column2
 A            B
 A            C      

我想要将df2合并:

Code      Country    Continent
   A         x           e
   B         y           f
   C         z           g

获取:

Column1   Column2    Country1    Continent1
   A         B          x           e
   A         C          x           e

然后,您需要再次对第二列中的国家进行此操作,以获取第二列的国家和大洲信息。

Column1   Column2    Country1    Continent1   Country2    Continent2
   A         B          x           e             y            f
   A         C          x           e             z            g

现在我正在使用合并功能:

df1<- merge(df1,df2,by.x="Column1",by.y="Code")

但我得到了重复的列:
Column1   Column2    Country    Continent
   A         B          x           e
   A         B          x           e
   A         C          x           e
   A         C          x           e

我尝试了所有的组合,包括all.x =TRUE等。

有没有一种方法可以获得我想要的输出?最好使用合并函数或plyr...

提前致谢。


我有同样的问题。你找到解决方案了吗? - Camila Vargas Restrepo
1个回答

3
使用merge()函数,我认为这是一个两步操作... "a"是第一次请求,而"c"则是第二次请求。
df1 <- read.csv(text="Column1,Column2
A,B
A,C", stringsAsFactors=F)
df2 <- read.csv(text="Code,Country,Continent
A,x,e
B,y,f
C,z,g", stringsAsFactors=F)

a <- merge(df1,df2,by.x="Column1",by.y="Code")
b <- merge(df1,df2,by.x="Column2",by.y="Code")
c <- merge(a,b, by.x=c("Column1", "Column2"), by.y=c("Column1", "Column2"), all=TRUE)
> a
  Column1 Column2 Country Continent
1       A       B       x         e
2       A       C       x         e
> c
  Column1 Column2 Country.x Continent.x Country.y Continent.y
1       A       B         x           e         y           f
2       A       C         x           e         z           g

通过使用 b <- merge(a, df2, by.x=2, by.y="Code", suffix=c("1","2"))b <- cbind(Country1=b[,2], b[,-2]),可以通过对 b 的编码稍作调整来消除最后一次合并。 - WaltS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接