R语言第六讲:R语言数据管理(二)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

R语言第六讲:R语言数据管理(二)
撰稿人:统计小可爱,爱笑的人运气不会太差
在统计分析过程中,如果数据分散在多个数据集,我们在进行下一步的时候就需要将其进行拼接合并。

数据合并
01
横向合并
1. cbind{base}
直接横向合并两个矩阵或数据框,并不需要制定一个公共索引,可使用cbind函数:
cbind (A, B)
该函数将横向合并对象A和对象B,为了能够正常工作,每个对象必须拥有相同的行数,以相同顺序排序。

例1:假设有a,b,c三个矩阵,其中矩阵a和矩阵b有3行数据,矩阵c有4行数据。

我们将对矩阵a和矩阵b,矩阵a和矩阵c进行横向合并,结果如下:
a <- matrix(1:12, 3, 4)
b <- matrix(-1:-12, 3, 4)
c <- matrix(-1:-20, 4, 5)
x1 <- cbind(a,b) #a和b合并成功
x2 <- cbind(a,c) #系统报错
Error in cbind(a, c) : number of rows of matrices must match (see arg 2)
2. bind_cols{dplyr}
bind_cols( )函数在dplyr包中,可以进行横向合并的函数,同样要求合并数据框行数相同。

bind_cols(A, B)
02
纵向合并
1. rbind{base}
纵向合并两个数据框(数据集),可使用rbind( )函数:
rbind(A, B)
两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。

如果对象A中拥有对象B中没有的变量,需要在合并前删除对象A中的多余变量,或者在对象B中创建追加的变量并将其值设为NA(缺失)。

例2:我们将对例1的矩阵a和矩阵b,矩阵a和矩阵c进行纵向合并,结果如下:
y1 <- rbind(a,b) #a和b合并成功
y2 <- rbind(a,c) #系统报错
Error in rbind(a, c) : number of columns of matrices must match (see arg 2)
2. bind_rows{dplyr}
bind_rows( )函数不要求字段名称必须相同,函数会自己做判断,把对象A中拥有而对象B中没有的变量,用NA值表示:bind_rows(A, B)
例3:假设我们要对data1和data2这两个数据框进行合并。

data1<-data.frame(nameA=c ('Emma', 'Mia', 'Zoe', 'Coden'),value=c(34, 52, 36, 18))
data2<-data.frame(nameB=c ('Jackson', 'Lucas', 'Logan', 'Ellen'), value=c(45, 31, 22, 19))
bind_rows(data1,data2)
数据连接
01
merge
横向合并两个数据框(数据集),使用merge( )函数。

多数情况下,两个数据框是通过一个或多个共有变量进行联结的。

merge (datax,datay,by= ,all= ,all.x= ,all.y= incomparables= ) by=:指定连接的字段;
all=:TRUE(全连接)或者FALSE(内连接)决定是否保留相同
ID字段,还是连接保留ID所有字段;
all.x=:TRUE(左连接)通过第一个数据框进行连接,即保留第一个数据框对应ID值;
all.y=:TRUE(右连接)通过第二个数据框进行连接,即保留第二个数据框对应ID值;
incomparables=:合并中不考虑的匹配值。

例4:假设我们要对x和y这两个数据框进行匹配,连接的变量为k1。

x <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5), data = 1:5)
y <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5), data = 1:5)
merge(x, y, by = 'k1') #这里x和y两个数据框的k1变量均有两个缺失(NA)。

这样在匹配过程中,x每条k1缺失的观测都会跟y的2条k1缺失的观测匹配到。

merge(x, y, by = 'k2', incomparables = NA) #通过设置“incomparables = NA”来让缺失的观测不进行匹配。

例5:下面举例介绍内连接,全连接,左连接和右连接。

假设要对数据集table1和table2进行匹配,连接的变量为ID。

table1<-data.frame(Id=c(1, 2, 3), sex=c('女', '男', '男'))
table2<-data.frame(Id=c(1, 2, 4), age=c(22, 17, 33))
#内连接,在每个表中找出符合条件的共有记录。

merge(table1,table2,by='Id',all=FALSE)
#全连接,返回符合条件的所有表的记录,没有与之匹配的,用NA 表示(结果是左连接和右连接的并集)
merge(table1,table2,by='Id',all=TRUE)
#左连接,根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用NA表示。

merge(table1,table2,by='Id',all.x=TRUE)
#右连接,根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用NA填充。

merge(table1,table2,by='Id',all.y=TRUE)
02
dplyr包的连接函数
dplyr包也提供了数据连接的函数:
#内连接
inner_join(table1,table2,by='Id')
#全连接
full_join(table1,table2,by='Id')
#左连接
left_join(table1,table2,by='Id')
#右连接
right_join(table1,table2,by='Id')
以上就是今天讲的内容,顺便吐槽下另一位作者的笔名。

相关文档
最新文档