vlambda博客
学习文章列表

R语言笔记——合并表




      本个专题将介绍R语言的一些基本技能和实用技巧。本教程说明了如何在R中联接(合并)两个表。






创建两个表

    表一:DF1



> mydata320 = mydata[,grepl("*C_A",names(mydata))]> df1 <- data.frame(ID = c(1, 2, 3, 4, 5),+ w = c('a', 'b', 'c', 'd', 'e'),+ x = c(1, 1, 0, 0, 1),+ y=rnorm(5),+                   z=letters[1:5])


##     ID  w   x        y     z          ## 1 1 a 1 -0.9158105 a## 2 2 b 1 1.3110974 b## 3 3 c 0 0.9887263 c## 4   4   d   0   1.6539287   d## 5 5 e 1 -1.4408052 e



 

表二:DF2



> df2 <- data.frame(ID = c(1, 7, 3, 6, 8),+ a = c('z', 'b', 'k', 'd', 'l'),+ b = c(1, 2, 3, 0, 4),+ c =rnorm(5),+                   d =letters[2:6])


> sub("okay", "fine", "She is okay.")


##    ID   a   b   c   d       ## 1 1 z 1 1.9473564 b## 2 7 b 2 1.7369362 c## 3 3 k 3 0.3874833 d## 4 6 d 0 2.2800340 e## 5   8   l   4   1.5378833   f



内部联接 

 



> df3 = merge(df1, df2, by ="ID")


##  ID  w  x   y   z  a  b   c   d      ## 1 1 a 1 -0.9158105 a z 1 1.9473564 b## 2  3  c  0   0.9887263  c  k  3  0.3874833  d




     如果两个表(数据帧)中的主键(匹配变量)名称都不相同



> df3 = merge(df1, df2, by.x ="ID", by.y="ID")




      左加入



> df4 = merge(df1, df2, by ="ID", all.x = TRUE)


##  ID  w  x   y   z   a   b   c   d  ## 1 1 a 1 -0.9158105 a z 1 1.9473564 b## 2  2  b  1   1.3110974  b  NA  NA      NA   NA## 3 3 c 0 0.9887263 c k 3 0.3874833 d## 4 4 d 0 1.6539287 d NA NA NA NA## 5  5  e  1  -1.4408052  e  NA  NA   NA   NA




      右加入



> df4 = merge(df1, df2, by ="ID", all.y = TRUE)


##   ID   w   x       y   z  a  b   c   d ## 1 1 a 1 -0.9158105 a z 1 1.9473564 b## 2 3 c 0 0.9887263 c k 3 0.3874833 d## 3 6 NA NA NA NA d 0 2.2800340 e## 4 7 NA NA NA NA b 2 1.7369362 c## 5  8  NA  NA   NA   NA  l  4  1.5378833  f




      完全(外部)加入



> df6 = merge(df1, df2, by ="ID", all = TRUE)


##  ID   w   x   y   z   a   b   c   d ## 1 1 a 1 -0.9158105 a z 1 1.9473564 b## 2 2 b 1 1.3110974 b NA NA NA NA## 3 3 c 0 0.9887263 c k 3 0.3874833 d## 4 4 d 0 1.6539287 d NA NA NA NA## 5 5 e 1 -1.4408052 e NA NA NA NA## 6 6 NA NA NA NA d 0 2.2800340 e## 7 7 NA NA NA NA b 2 1.7369362 c## 8  8  NA  NA   NA   NA   l   4  1.5378833   f




 交叉连接



> df7 = merge(df1, df2, by = NULL)


## ID.x  w  x  y       z      ID.y  a  b          c     d##   1   1  a  1  -0.9158105   a   1  z  1  1.9473564  b##   2   2  b  1   1.3110974   b   1  z  1  1.9473564  b##   3   3  c  0   0.9887263   c   1  z  1  1.9473564  b##   4   4  d  0   1.6539287   d   1  z  1  1.9473564  b##   5   5  e  1  -1.4408052   e   1  z  1  1.9473564  b##   6   1  a  1  -0.9158105   a   7  b  2  1.7369362  c## 7 2 b 1 1.3110974 b 7 b 2 1.7369362 c## 8 3 c 0 0.9887263 c 7 b 2 1.7369362 c## 9 4 d 0 1.6539287 d 7 b 2 1.7369362 c## 10 5 e 1 -1.4408052 e 7 b 2 1.7369362 c## 11 1 a 1 -0.9158105 a 3 k 3 0.3874833 d## 12 2 b 1 1.3110974 b 3 k 3 0.3874833 d## 13 3 c 0 0.9887263 c 3 k 3 0.3874833 d## 14 4 d 0 1.6539287 d 3 k 3 0.3874833 d## 15 5 e 1 -1.4408052 e 3 k 3 0.3874833 d## 16 1 a 1 -0.9158105 a 6 d 0 2.2800340 e## 17 2 b 1 1.3110974 b 6 d 0 2.2800340 e## 18 3 c 0 0.9887263 c 6 d 0 2.2800340 e##  19   4  d  0   1.6539287   d   6  d  0  2.2800340  e## 20 5 e 1 -1.4408052 e 6 d 0 2.2800340 e## 21 1 a 1 -0.9158105 a 8 l 4 1.5378833 f## 22 2 b 1 1.3110974 b 8 l 4 1.5378833 f## 23 3 c 0 0.9887263 c 8 l 4 1.5378833 f## 24 4 d 0 1.6539287 d 8 l 4 1.5378833 f## 25   5  e  1  -1.4408052   e   8  l  4  1.5378833  f