df2=data.frame(CustomerId=c(2,4,6,7),State=c(rep("Alabama",3),rep("Ohio",1)))>" />
搜档网
当前位置:搜档网 › R语言之merge函数案例

R语言之merge函数案例

R语言之merge函数案例
R语言之merge函数案例

R语言的merge函数可以实现类似SQL的有点类似left join right join 或者类似union 的效果。

df1 =

data.frame(CustomerId=c(1:6),Product=c(rep("Toaster",3),rep("Radio",3))) > df2 =

data.frame(CustomerId=c(2,4,6,7),State=c(rep("Alabama",3),rep("Ohio",1))) > df1

CustomerId Product

1 1 Toaster

2 2 Toaster

3 3 Toaster

4 4 Radio

5 5 Radio

6 6 Radio

> df2

CustomerId State

1 2 Alabama

2 4 Alabama

3 6 Alabama

4 7 Ohio

> merge(df1, df2, all=TRUE)

CustomerId Product State

1 1 Toaster

2 2 Toaster Alabama

3 3 Toaster

4 4 Radio Alabama

5 5 Radio

6 6 Radio Alabama

7 7 Ohio

#full join的效果

> merge(df1, df2, all.x=TRUE)

CustomerId Product State

1 1 Toaster

2 2 Toaster Alabama

3 3 Toaster

4 4 Radio Alabama

5 5 Radio

6 6 Radio Alabama

#left join的效果

> merge(df1, df2, all.y=TRUE)

CustomerId Product State

1 2 Toaster Alabama

2 4 Radio Alabama

3 6 Radio Alabama

4 7 Ohio

#right join的效果。。

在df1 和df2 有相同的列名称下

> df1<-data.frame(col1=c(1,2),col2=c(2,3))

> df2<-data.frame(col1=c(1,4),col2=c(2,100))

> merge(df1, df2, all=TRUE)

col1 col2

1 1 2

2 2 3

3 4 100

#这个达到的是union的效果

执行merge函数时,函数自动会找到两个数据框df1和df2共有的列,即id那一列(即相当于by= "id"),当参数all= FALSE时,会将两个数据框中该列数值相等的那些行输出来,类似于对这两个数据框的id这一列求交集(intersection)。此例中是id为2或7这两行。此外,还可以发现df1和df2的输入顺序不会影响最终结果,仅仅会影响输出结果中heights和weights这两列的顺序。

更详细可以参

考 https://www.sodocs.net/doc/504634489.html,/13602_96265a9b3bac4cb1b 214340770aa18a1.html

------------

by参数的使用

上面的示例中by参数只有一个值,如果有两个数值(即长度为2的向量),也就是两个数据框中有共同的两列。

df1$sex <- c("f", "m", "f", "f", "m")

df2$sex <- c("f", "f", "m", "m", "f", "f", "f")

merge(df1, df2)

## id sex heights weights

## 1 2 f 62 113

## 2 7 m 67 135

merge(df1, df2, by = c("id", "sex"))

## id sex heights weights

## 1 2 f 62 113

## 2 7 m 67 135

merge(df1, df2, by = "id")

## id heights sex.x weights sex.y

## 1 2 62 f 113 f

## 2 7 67 m 135 m

为两个数据框分别添加一列后,这样它们就有了共同的两列。当运行merge函数后发现,函数会自动找到共同的列,然后找到id和sex这两列中共有的数值。此外,如果只设定by= "id"的话,则两数据框中共有的sex那一列则会以sex.x和sex.y形式输出。

相关主题