R中数据框之间的合并dplyr

R中数据框之间的合并dplyr

1、转换与合并

left_join(a, b, by = “x1”): 向数据集a中加入匹配的数据集b记录(行)。

right_join(a, b, by = “x1”): 向数据集b中加入匹配的数据集a记录。

inner_join(a, b, by = “x1”): 合并数据。仅保留匹配的记录。

full_join(a, b, by = “x1”): 合并数据。保留所有记录,所有行。没有的用NA填充

library(dplyr)
a=data.frame(x1=c("A","B","C"),x2=c(1:3))
b=data.frame(x1=c("A","B","D"),x3=c("T","F","T"))
a;b
##   x1 x2
## 1  A  1
## 2  B  2
## 3  C  3
##   x1 x3
## 1  A  T
## 2  B  F
## 3  D  T
left_join(a, b, by = "x1")# 向数据集a中加入匹配的数据集b记录。
##   x1 x2   x3
## 1  A  1    T
## 2  B  2    F
## 3  C  3 <NA>
right_join(a, b, by = "x1")#    向数据集b中加入匹配的数据集a记录。
##   x1 x2 x3
## 1  A  1  T
## 2  B  2  F
## 3  D NA  T
inner_join(a, b, by = "x1")#    合并数据。仅保留匹配的记录。
##   x1 x2 x3
## 1  A  1  T
## 2  B  2  F
full_join(a, b, by = "x1")# 合并数据。保留所有记录,所有行,没有的用NA填充
##   x1 x2   x3
## 1  A  1    T
## 2  B  2    F
## 3  C  3 <NA>
## 4  D NA    T

2、筛选与合并

semi_join(a, b, by = “x1”): 数据集a中能与数据集b匹配的记录。

anti_join(a, b, by = “x1”): 数据集a中与数据集b不匹配的记录

3、集合操作

intersect(x, y): 均出现在数据集x和y中的记录。xy交集

union(x, y): 出现在数据集x或y中的记录。 xy并集

setdiff(x, y): 仅出现在数据集x而不在y中的记录。x与y的差集

bind_rows(x, y): 把数据集y作为新的⾏行添加到x中。

bind_cols(x, y): 把数据集y作为新的列添加到x中。

  • 注意:数据按所在位置匹配。
  • 和rbind() 与cbind()不一样的是,rbind()/cbind()对数据合并有严格的要求
x=data.frame(A=c("a","b","c"),B=c("t","u","v"),C=c(1:3))
y=data.frame(A=c("a","b","d"),B=c("t","u","v"),D=c(2:4))
x;y
##   A B C
## 1 a t 1
## 2 b u 2
## 3 c v 3
##   A B D
## 1 a t 2
## 2 b u 3
## 3 d v 4
bind_rows(x, y) #行合并,列全部显示,没有的用NA填充 ,选择.id="name"参数,多增加一列,列名name
##   A B  C  D
## 1 a t  1 NA
## 2 b u  2 NA
## 3 c v  3 NA
## 4 a t NA  2
## 5 b u NA  3
## 6 d v NA  4
bind_rows(x, y,.id="name")# 为了区别数据是分别来自于两个其他数据库,可以用id进行区别
##   name A B  C  D
## 1    1 a t  1 NA
## 2    1 b u  2 NA
## 3    1 c v  3 NA
## 4    2 a t NA  2
## 5    2 b u NA  3
## 6    2 d v NA  4
bind_cols(x, y) #列合并,
##   A...1 B...2 C A...4 B...5 D
## 1     a     t 1     a     t 2
## 2     b     u 2     b     u 3
## 3     c     v 3     d     v 4

4、数据排序

arrange(.data, …, .by_group = FALSE) :根据变量进行排序 + 默认升序,在变量前面添加desc()则变为降序 + .by_group = FALSE 默认忽视对组的升序排序,设置为TRUE则把组进行升序排序以后再按比变量进行排序

arrange(mtcars, cyl, desc(disp))  #根据变量进行排序
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
by_cyl <- mtcars %>% group_by(cyl)

by_cyl %>% arrange(desc(wt), .by_group = TRUE) #默认忽视对组的升序排序,设置为TRUE则把组进行升序排序以后再按比变量进行排序
## # A tibble: 32 x 11
## # Groups:   cyl [3]
##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1  24.4     4 147.     62  3.69  3.19  20       1     0     4     2
##  2  22.8     4 141.     95  3.92  3.15  22.9     1     0     4     2
##  3  21.4     4 121     109  4.11  2.78  18.6     1     1     4     2
##  4  21.5     4 120.     97  3.7   2.46  20.0     1     0     3     1
##  5  22.8     4 108      93  3.85  2.32  18.6     1     1     4     1
##  6  32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1
##  7  26       4 120.     91  4.43  2.14  16.7     0     1     5     2
##  8  27.3     4  79      66  4.08  1.94  18.9     1     1     4     1
##  9  33.9     4  71.1    65  4.22  1.84  19.9     1     1     4     1
## 10  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2
## # … with 22 more rows
  • 发表于 2021-05-20 21:49
  • 阅读 ( 3936 )
  • 分类:R

相关问题

0 条评论

请先 登录 后评论
omicsgene
omicsgene

生物信息

702 篇文章

作家榜 »

  1. omicsgene 702 文章
  2. 安生水 351 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. rzx 78 文章
  7. 红橙子 78 文章
  8. CORNERSTONE 72 文章