• R语言—数据框


    数据框(Dataframe)

    数据框:

       Name Age Sex Height
    1 Linda  20   F    160
    2  John  21   M    165
    3 Emily  22   F    159
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 数据框类似矩阵,有行和列两个维度。
    • 数据框不同于矩阵,数据框的每一列可以是不同的模式(mode)。
    • 数据框每一列都有一个唯一的列名,每一列的长度均相同。

    数据框就是数据库中的数据表,每一行称为一条记录,每一列称为一个属性。数据框类似于C语言中的结构体,用C语言存储上述内容,使用结构体数组

    创建数据框

    语法格式:

    mydata<-data.frame(col1,col2,col3,…)#其中:col1,col2,col3可以为字符型、数值型或者逻辑型数据
    
    • 1

    实例如下:

    > Name<-c("Linda","John","Emily")
    > Age<-c(20,21,22)
    > Sex<-c("F","M","F")
    > Height<-c(160,165,159)
    > df<-data.frame(Name,Age,Sex,Height)
    > df
    Name Age Sex Height
    1 Linda  20   F    160
    2  John  21   M    165
    3 Emily  22   F    159
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意事项:

    • 数据框是R语言的一种数据结构,通常以矩阵形式存放的数据,矩阵的每一列可以是不同类型的数据。
    • 数据框每列为一个变量,每行为一个观测样本。
    • 数据框的列必须命名

    也可以使用下面这种方式进行创建

    df<-data.frame(Name=c("Linda","John","Emily"), Age=c(20,21,22),Sex=c("F","M","F"), Height=c(160,165,159))
    
    • 1

    数据框的成分由各个变量组成,每个变量可以自行命名

    数据框的访问

    给定数据框

    > df<-data.frame(Name=c("Linda","John","Emily"), Age=c(20,21,22),Sex=c("F","M","F"), Height=c(160,165,159))
    > df
       Name Age Sex Height
    1 Linda  20   F    160
    2  John  21   M    165
    3 Emily  22   F    159
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    > str(df)
    'data.frame':	3 obs. of  4 variables:
     $ Name  : chr  "Linda" "John" "Emily"
     $ Age   : num  20 21 22
     $ Sex   : chr  "F" "M" "F"
     $ Height: num  160 165 159
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    说明:df有3个观测(3行),4个变量(4列)

    通过组件的索引值来访问组件

    > x<-df[[1]]
    > x
    [1] "Linda" "John"  "Emily"
    > is.vector(x)
    [1] TRUE
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    返回的结果是向量

    > x=df[1]
    > x
       Name
    1 Linda
    2  John
    3 Emily
    > is.vector(x)
    [1] FALSE
    > is.data.frame(x)
    [1] TRUE
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    返回的结果为数据框

    注意:

    第一个访问使用的是两个中括号,第二次访问使用的是一个中括号

    如果分量有名字,可以按照名字进行引用

    > df[["Name"]]
    [1] "Linda" "John"  "Emily"
    
    • 1
    • 2

    通过组件的组件名来访问组件

    这里我们用到“$”符号,“$”提取数据框中某个变量的元素

    > df$Name
    [1] "Linda" "John"  "Emily"
    
    • 1
    • 2

    通过访问矩阵的方式来访问组件

    访问第1列

    > x<-df[,1]
    > x
    [1] "Linda" "John"  "Emily“
    
    
    • 1
    • 2
    • 3
    • 4

    先提取前两行,然后提取第1列和第3列通过组件的索引值来访问组件。

    > df[1:2,c(1,3)]
       Name Sex
    1 Linda   F
    2  John   M
    
    • 1
    • 2
    • 3
    • 4

    数据筛选

    生成数据框,三门课程的成绩为区间0-5之间服从均匀分布的随机数,保留1位小数。(runif(),round())

    > Exam1<-round(runif(10,0,5),1)
    > Exam2<-round(runif(10,0,5),1)
    > Exam3<-round(runif(10,0,5),1)
    > Quiz<-data.frame(Exam1,Exam2,Exam3)
    > Quiz
       Exam1 Exam2 Exam3
    1    2.5   3.0   1.9
    2    1.9   2.6   4.8
    3    0.4   2.2   3.9
    4    2.2   1.6   0.0
    5    3.6   1.0   2.5
    6    2.4   0.3   2.1
    7    3.1   3.2   5.0
    8    1.2   4.0   1.5
    9    0.5   1.0   2.0
    10   1.7   4.6   0.9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    提取出Exam3成绩>=3.5的学生信息(观测)(subset)

    #方法一
    > Quiz[Quiz$Exam3>=3.5,]
      Exam1 Exam2 Exam3
    2   1.9   2.6   4.8
    3   0.4   2.2   3.9
    7   3.1   3.2   5.0
    #方法二
    > subset(Quiz,Exam3>=3.5)
      Exam1 Exam2 Exam3
    2   1.9   2.6   4.8
    3   0.4   2.2   3.9
    7   3.1   3.2   5.0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    扩展数据框

    可以通过添加列和行来扩展数据框

    添加列

    只需使用新的列名称添加列向量。

    #创建数据框
    > df<-data.frame(Name=c("Linda","John","Emily"), Age=c(20,21,22),Sex=c("F","M","F"), Height=c(160,165,159))
    > df
       Name Age Sex Height
    1 Linda  20   F    160
    2  John  21   M    165
    3 Emily  22   F    159
    #创建新向量
    > birth<-as.Date(c("2000-10-10","2001-09-08","2000-01-01"))
    > birth
    [1] "2000-10-10" "2001-09-08" "2000-01-01"
    #为数据框添加列向量
    > df$birth<-birth
    > df
       Name Age Sex Height      birth
    1 Linda  20   F    160 2000-10-10
    2  John  21   M    165 2001-09-08
    3 Emily  22   F    159 2000-01-01
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    📙补充说明

    as.Date()用于在字符表示和表示日历日期的"Date"类对象之间进行转换的函数。

    > class(birth)
    [1] "Date"
    
    • 1
    • 2

    也可以使用cbind函数在原有列的基础上创建新列

    > new.Quiz<-cbind(Quiz,Exam1-Exam2)
    > new.Quiz
       Exam1 Exam2 Exam3 Exam1 - Exam2
    1    2.5   3.0   1.9          -0.5
    2    1.9   2.6   4.8          -0.7
    3    0.4   2.2   3.9          -1.8
    4    2.2   1.6   0.0           0.6
    5    3.6   1.0   2.5           2.6
    6    2.4   0.3   2.1           2.1
    7    3.1   3.2   5.0          -0.1
    8    1.2   4.0   1.5          -2.8
    9    0.5   1.0   2.0          -0.5
    10   1.7   4.6   0.9          -2.9
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    可以给新创建的列命名,这样会更清晰一些

    > new.Quiz<-cbind(Quiz,Diff=Exam1-Exam2)
    > new.Quiz
       Exam1 Exam2 Exam3 Diff
    1    2.5   3.0   1.9 -0.5
    2    1.9   2.6   4.8 -0.7
    3    0.4   2.2   3.9 -1.8
    4    2.2   1.6   0.0  0.6
    5    3.6   1.0   2.5  2.6
    6    2.4   0.3   2.1  2.1
    7    3.1   3.2   5.0 -0.1
    8    1.2   4.0   1.5 -2.8
    9    0.5   1.0   2.0 -0.5
    10   1.7   4.6   0.9 -2.9
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    添加行

    要将更多行永久添加到现有数据框,我们需要引入与现有数据框相同结构的新行,并使用rbind()函数,其实也就是对两个相同结构的数据框进行垂直合并

    #原数据框
    > df
       Name Age Sex Height      birth
    1 Linda  20   F    160 2000-10-10
    2  John  21   M    165 2001-09-08
    3 Emily  22   F    159 2000-01-01
    #创建新数据框
    > new.df<-data.frame(Name="David",Age=20,Sex="M",Height=167,birth=as.Date("2000-08-08"))
    > new.df
       Name Age Sex Height      birth
    1 David  20   M    167 2000-08-08
    #将两个数据框进行垂直合并
    > combine.df<-rbind(df,new.df)
    > combine.df
       Name Age Sex Height      birth
    1 Linda  20   F    160 2000-10-10
    2  John  21   M    165 2001-09-08
    3 Emily  22   F    159 2000-01-01
    4 David  20   M    167 2000-08-08
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    使用apply()函数

    如果数据框的每一列的数据类型相同,则可以对数据框应用apply函数,示例如下:

    > Quiz
       Exam1 Exam2 Exam3
    1    2.5   3.0   1.9
    2    1.9   2.6   4.8
    3    0.4   2.2   3.9
    4    2.2   1.6   0.0
    5    3.6   1.0   2.5
    6    2.4   0.3   2.1
    7    3.1   3.2   5.0
    8    1.2   4.0   1.5
    9    0.5   1.0   2.0
    10   1.7   4.6   0.9
    #计算每一位同学三次测试的最高成绩
    > apply(Quiz,1,max)
     [1] 3.0 4.8 3.9 2.2 3.6 2.4 5.0 4.0 2.0 4.6
    #计算每一次测试的最高成绩
    > apply(Quiz,2,max)
    Exam1 Exam2 Exam3 
      3.6   4.6   5.0 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    Vue的自定义事件(Custom Events):实现组件间通信的强大工具
    minitest使用笔记1
    vue10CRUD+表单验证
    【数据结构与算法】之回溯、滑动窗口、分治算法经典问题
    make quick-example I: 变量语法 & 变量插值
    [QT编程系列-43]: Windows + QT软件内存泄露的检测方法
    nuxt使用i18n进行中英文切换
    云边端协同与任务调度
    leetcode - 1293. Shortest Path in a Grid with Obstacles Elimination
    nodejs事件循环
  • 原文地址:https://blog.csdn.net/W_chuanqi/article/details/127699660