R语言| 数据整理:数据合并、选择子集、数据转换

学习打卡100天 Day2 2020.3.8
R语言数据整理相关知识

  1. 数据合并
    函数cbind( )和rbind( )只能对数据进行简单的连接,并且要求合并的数据集具有相同的维数,否则R语言会报错。
    函数merge( )适用于合并含有共同的行或者列的两个数据集,其函数的基本书写格式:
    merge(x, y, by=intersect(names(x), names(y)),by.x=by,by.y=by, all=FALSE,all.x=all,all.y=all, sort=TRUE,suffixes=c(".x",".y"), incomparables=NULL,…)
    参数介绍:
    x,y :用于合并的两个数据框或其他数据对象
    by, by.x, by.y: 指定依据哪些行合并数据框,默认值为x,y中列名相同的列
    all, all.x,all.y: 逻辑值,指定x和y的行是否全在输出文件中,默认值为FALSE
    sort:逻辑值,指定参数by中的列是否需要排序,默认值为TRUE
    suffixes:字符型向量,指定除参数by中的列相同列名的后缀
    incomparables:指定参数by中哪些单元不进行合并,默认值为NULL
    例:创建a,c两个矩阵,利用merge( )函数对其进行合并,如下所示:
    R语言| 数据整理:数据合并、选择子集、数据转换_第1张图片
    merge(a,c)表示取矩阵a,c的交集
    merge(a,c,all=T)表示取矩阵a,c的并集
    merge(a,c, all.x=T)表示以矩阵a拥有的进行合并然后显示
    merge(a,c,all.y)表示以矩阵b所拥有的进行合并然后显示

  2. 选取子集

  • 1)利用数据索引方式选取子集
>data("iris")
>head(iris)   #head( )函数n的默认值为6,即选取数据集前6行的数据
>head(iris[,c(2,4)])   #iris数据集前6行,第2到4列
>head(iris[,-(2,4)])    #iris数据集前6行,剔除第2到4列的数据
>head(iris[2:20,])      #iris数据集2到7行
>head(iris[-c(2:20),])  #iris数据集剔除2到20行后到前6行数据,即第1、21、22、23、24、25行
>iris$Sepal.Length=NULl  #剔除iris数据集中的Sepal.Length列
>head(iris)  #iris数据集剔除sepal.length列后前六行数据
  • 2)利用subset( )函数选取子集
    subset( )函数主要用于从数据集中选取符合设定条件的数据或相关的列,其函数基本书写格式为:
    subset(x,subset,select. … )
    其中,x指定用于操作的R对象,可以是矩阵或数据框;subset是逻辑值,指定需要选取的元素或行;select指定需要选取的列
    例:
>d1=subset(iris,Sepal.Length>=mean(iris$Sepal.Length),select=-Sepal.Width)
>head(d1)

上述代码表示:
在除掉变量Sepal.Width后的数据集中选取子集,该子集的变量Sepal.Length的值必须大于其均值

  • 3)利用sample( )函数实现随机抽样方式选取子集
    sample(x, size, replace=FALSE, prob=NULL)
    其中x是指定需要进行抽样的数据对象
    size是一个非负整数,指定抽样的大小;replace指定是否重复抽样,默认值为FALSE; prob是一个向量,指定元素被抽取的概率权重,默认值为NULL,即等概率抽取。
    例:
>set.seed(1234)  #设定随机种子,固定随机抽样的数值,保证抽样数据不发生变化
>d2=iris[sample(1:150,size=20),]
>d2
  1. 数据转换
    (1)函数as.vector: 将矩阵或多维数组转化为长向量
>x=matrix(1:10,nrow=5)  #创建矩阵x
>as.vector(x)  #将矩阵x转换为长向量
>x
[1] 1 2 3 4 5 6 7 8 9 10

(2)函数unlist: 将列表和数据框向量化

>z=data.frame(x=c(1:3),y=(2:4)
>unlist(z)

(3)函数transform( )和within( )函数
使用函数transform( )或者within( )可以为原数据框增加新列变量、改变原列变量的值和删除列变量.

>data(iris)
>iris2=transform(iris,log.length=log(Sepal.Length)) #增加列变量
>iris2=transform(iris2,Sepal.Width=NULL)  #删除列变量
>iris3=within(iris,{log.length=log(Sepal.Length)})  #增加列变量
>iris3=within(iris3,{rm(Sepal.Width)}    #删除列变量

(4)函数stack( )和unstack( )
使用函数stack( )和unstack( )可以对数据框和列表的长、宽格式进行转换。stack( )用于将数据框或列表转换成两列,分别是数据和对应的名称;函数unstack( )作用正好相反。
例:
R语言| 数据整理:数据合并、选择子集、数据转换_第2张图片

你可能感兴趣的:(R语言,r语言)