• R语言【数据管理】


    目录

    一、mode获取类型

     列表相关操作

     append操作

    attach与detach

    transform

     二、特殊值

     查看是否有NA

    na.omit

     三、类型转换

     四、数据排序

    sort()/order()

    对表格中的某一列进行排序

     五、数据集的合并

    1、直接横向合并

    2.如果需要指定索引 

    3.纵向合并 

    4.示例 

     六、取数据集子集

    1、选入变量(列)

    2、剔除变量(列) 

     3.选入观测

     七、使用函数subset()选择观测

     八、处理数据对象实用函数

     九、向量分组

    十、将函数应用于每个列表元素

     十一、将函数应用于行或列

     十二、将函数应用于组数据

     十三、将函数应用于行组

     十四、用户自编函数

    十五、循环 


    一、mode获取类型

    1. stu_name <- "Richard"
    2. yield <- 100
    3. mode(stu_name)
    4. mode(yield)

     列表相关操作

    1. v <- c(1,2,3)
    2. v
    3. v <- c(v,4,5)
    4. v
    5. w <- c(6,7,8,9)
    6. v <- c(v,w)
    7. v[15] <- 0
    8. v

     append操作

    append可以追加元素,在指定after之后可以指定追加的位置

    1. x <- 1:10
    2. x
    3. y <- append(x,100,after=5)
    4. y
    5. z <- append(x,100,after=0)
    6. z

    这里我们可以看到我们可以指定将表中的某两列相加,求平均,其生成的数据会生成新的一列数据。

    1. mydata <- data.frame( x1 = c(1,2,3,4), x2 = c(5,6,7,8))
    2. mydata
    3. mydata$sumx <- mydata$x1+mydata$x2
    4. mydata
    5. mydata$meanx <- (mydata$x1+mydata$x2)/2
    6. mydata

    attach与detach

     attach与detach是成对使用的。attach可以与表相连,detach可以取消与表相连

    1. attach(mydata)
    2. mydata$sumx <- x1+x2
    3. mydata$meanx <- (x1+x2)/2
    4. detach(mydata)
    5. mydata <- transform(mydata, sumx=x1+x2, meanx=(x1+x2)/2)

    transform

    使用transform来改变数据框

    1. mydata <- transform(mydata, sumx=x1+x2, meanx=(x1+x2)/2)
    2. mydata

     二、特殊值

    从下面的测试中,我们可以看到如果是NULL的话,R语言缺失为我们生成了一个对象,但是没有存储空间。如果是NA的话,R缺失给对象分配了一块空间,但是这块空间中的内容时空的。

    NA表示无法获取的值

    NULL表示因不存在而无法获取的值

    Inf无穷,,1/0得到的就是Inf

    NAN无法表示,不是一个数,使用Inf-Inf所得到的就是NAN

    1. x <- NULL
    2. y <- NA
    3. length(x)
    4. length(y)

     查看是否有NA

    1. y <- c(1,2,3,NA)
    2. is.na(y)

     如果在数据里面包含NA时无法进行运算的,但我们可以使用na.rm=T来将我们的NA给忽略掉

    1. x <- y[1]+y[2]+y[3]+y[4]
    2. x
    3. z <- sum(y)
    4. z
    5. l <- sum(y, na.rm=T)
    6. l

    na.omit

     我们也可以使用na.omit()来将我们移除全部包含NA的观测。

    1. mydata <- read.table("/Users/yangkailiang/Documents/R/data/leadership.csv",
    2. header=T, sep=",")
    3. mydata
    4. newdata <- na.omit(mydata)
    5. newdata

     三、类型转换

    判断是否是该类型类型转换
    is.character()as.character()
    is.vector()as.vector()
    is.matrix()as.matrix()
    is.data.frame()as.data.frame()
    is.factor()as.factor()
    is.logical()as.logical()
    is.numeric()as.numeric()
    1. a <- c(1,2,3)
    2. a
    3. is.numeric(a)
    4. is.vector(a)
    5. a <- as.character(a)
    6. is.numeric(a)
    7. is.vector(a)
    8. is.character(a)

     四、数据排序

    sort()/order()

    从下面的测试代码中我们可以看出,如果直接使用sort本身的话,本身的数据的顺序是不会发生改变的,燃石如果我们将排序好的数据传给我们别的变量来接收的话,接收到的数据就是排好序的。默认的顺序是升序。

    1. x <- c(12,4,7,11,2)
    2. sort(x)
    3. x
    4. y <- sort(x)
    5. y
    6. z <- order(x)
    7. x[z]

     此外,我们也可以使用order来使我们的数据有序。但order生成的是该数组中的每一个元素的大小排序的索引值。所以我们需要用x[z]来使我们的数据呈现出有序的状态。从下面的图中我们可以看到x中的第一个元素应该排在第五个位置,第二个元素应该排在第二个位置,以此类推。

     ​​​​​​​

    对表格中的某一列进行排序

    1. #按照我们的age列进行排序
    2. newdata <- mydata[order(mydata$age),]
    3. #按照我们的age列进行降序排序
    4. newdata2 <- mydata[order(mydata$age,decreasing=T),]
    5. #先按照gender进行排序,再按照age进行升序排序
    6. newdata3 <- mydata[order(mydata$gender,mydata$age),]
    7. attach(mydata)
    8. #先按照gender进行排序,再按照年龄进行降序排序
    9. newdata4 <- mydata[order(gender,-age),]
    10. newdata4
    11. detach(mydata)

     五、数据集的合并

    1、直接横向合并

    直接横向合并不需要指定公共索引

    C = cbind(A,B)

    2.如果需要指定索引 

    C = merge(A,B, by="公共索引")
    C = merge(A,B, by="ID")
    C = merge(A,B, by=c("ID","Country"))

    3.纵向合并 

    如果需要纵向合并,A与B,A与B需要拥有完全相同的变量(顺序可以不一样)

    4.示例 

    这里是我们四张表格的数据

    1. #直接将我们的两张表格合并在一起(左右)
    2. cdata <- cbind(data1,data3)
    3. data5 <- cbind(data1,data4)
    4. #使用merge函数的话,会自动合并对应值
    5. data6 <- merge(data1,data2)
    6. data7 <- merge(data1,data4)
    7. #按照kids列进行合并排序
    8. data8 <- merge(data1,data4,by="kids")

     六、取数据集子集

    1、选入变量(列)

    1. #从我们的mydata中选取全部行,取第1,2,4列
    2. newdata <- mydata[,c(1,2,4)]
    3. #从我们的mydata中选取全部行,取managerID,country,age列
    4. newdata2 <- mydata[,c("managerID","country","age")]

    2、剔除变量(列) 

    1. mydata
    2. #方法一
    3. #剔除mydata种地第一列,第二列,第四列
    4. newdata <- mydata[,c(-1,-2,-4)]
    5. newdata
    6. #方法二
    7. #剔除"managerID","country","age"这三列,会返回一个布尔类型的向量
    8. #%in%为一个运算符
    9. delvar <- names(mydata) %in% c("managerID","country","age")
    10. newdata2 <- mydata[!delvar]

     3.选入观测

    1. #选取一到三行,全部的列
    2. newdata <- mydata[1:3,]
    3. newdata
    4. #筛选出性别是M,并且年龄大于30的观测
    5. newdata1 <- mydata[which(mydata$gender=="M" & mydata$age>30),]
    6. newdata1
    7. attach(mydata)
    8. #筛选出性别是M,并且年龄大于30的观测
    9. newdata2 <- mydata[which(gender=="M" & age>30),]
    10. newdata2
    11. detach(mydata)

     七、使用函数subset()选择观测

    1. #对我们mydata数据框中筛选年龄大于等于35或者年龄小于24的的观测,并且将其q1,q2,q3列的数据显示出来
    2. newdata <- subset(mydata, age>=35 | age < 24,select=c("q1","q2","q3"))
    3. newdata
    4. #将mydata数据框中性别为M,并且年龄大于25,将其中gender列到q4列全部都显示出来
    5. newdata2 <- subset(mydata, gender == "M" & age >25,select=gender:q4)
    6. newdata2

     八、处理数据对象实用函数

     

    1. length(newdata)
    2. dim(newdata)
    3. #str是struct的缩写
    4. str(newdata)
    5. class(newdata)
    6. mode(newdata)
    7. names(newdata)
    8. head(newdata)
    9. tail(newdata)
    10. ls(newdata)

     九、向量分组

    split()返回值为一个列表,按照某一个因子变量对数据集进行分隔。

    1. library(MASS)
    2. groups<-split(Cars93$MPG.city,Cars93$Origin)
    3. groups[[1]]
    4. groups[[2]]

    十、将函数应用于每个列表元素

     lapply返回结果为列表

    sapply返回结果为向量

    1. scores <- list(S1=numeric(0),S2=numeric(0),S3=numeric(0),S4=numeric(0))
    2. scores$S1 <- c(89,85,85,62,93,77,85)
    3. scores$S2 <- c(60,100,83,77,86)
    4. scores$S3 <- c(95,86,91,82,63,67,97,64,55)
    5. scores$S4 <- c(67,63,83,89)
    6. lapply(scores,length)
    7. sapply(scores,mean)

     

     

     十一、将函数应用于行或列

    apply()
    results <- apply(matrix,1,function) #对矩阵的行进行处理
    results <- apply(matrix,2,function) #对矩阵的列进行处理

    对于数据框而言,如果每一行的数据类型一致,则可以使用apply来处理

    如果数据框的列数据类型不一致,则需要使用上述的lapply与sapply来进行处理

    1. Mat_long <- matrix(c(-1.85,0.94,-0.54,-1.41,1.35,-1.71,-1.01,-0.16,-0.35,-3.72,1.63,-0.28,-0.28,2.45,-1.22),nrow=3,dimnames=list(c("Moe", "Larry","Curly"),c("trial1","trial2","trial3","trial4","trial")))
    2. apply(Mat_long,1,mean)
    3. apply(Mat_long,1,range)
    4. apply(Mat_long,2,mean)

     

     十二、将函数应用于组数据

    tapply(vector,factor,function)

    vector为一个向量,factor为一个分组因子,function是一个函数,即需要对vector进行的方法

    1. wagedata <- read.csv("/Users/Documents/R/data/wagedata.csv")
    2. attach(wagedata)
    3. #先将edu按照female进行分组,然后分别求平均值
    4. tapply(educ,female,mean)
    5. detach(wagedata)
    6. educ

     

     

     十三、将函数应用于行组

    by(dataframe,factor,function)

    dataframe是一个向量,factor是一个分组因子,function是一个函数

    1. wagedata <- read.csv("/Users/Documents/R/data/wagedata.csv")
    2. by(wagedata,female,mean)

     十四、用户自编函数

    myfunction <- function(arg1,arg2,...){
    statements
    return(object)
    }

    1. #以下为勾股定理的编写
    2. #向量的平方指的是每一个分量的平方,然后我们将每一个分量的平方相加再开平方,我们就能够得到我们第三条边的长度。
    3. lengththm <- function(x) {
    4. thirdl <- sqrt(sum(x^2))
    5. return(thirdl)
    6. }
    7. a <- c(3,4)
    8. lengththm(a)

     

    十五、循环 

    for (var in seq) {
    statements
    }
    while (condition) {
    statements
    }

    1. x <- c(2,5,10)
    2. for (n in x)
    3. print(n^2)

     

  • 相关阅读:
    PEG包裹碳化硅(SiC)量子点荧光材料
    【读书笔记】Principles and practices of interconnection networks 第一章笔记
    C复习-结构struct+bit field+union
    Linux服务器如何暂停程序与恢复进程
    自制操作系统日志——第九天
    正则表达式练习
    基于Springboot 游戏娱乐信息平台-计算机毕设 附源码 04691
    面向对象编程(高级部分)——final关键字
    Selenium 模拟操作与 pytest 断言的结合使用
    vue模板语法
  • 原文地址:https://blog.csdn.net/weixin_62684026/article/details/125603586