美文网首页
给女朋友写的生统资料_Part4

给女朋友写的生统资料_Part4

作者: 城管大队哈队长 | 来源:发表于2019-05-10 17:37 被阅读0次

上一节我们讲到了一些向量提取的操作。这一部分我们会讲一些数据框提取的操作。在R里面,数据框提取的基础操作跟向量很相似,还是以 [] 符号为基础。不过由于数据框是一个二维的数据结构,即有行与列,所以我们要以 dataframe[行索引, 列索引] 这种操作来提取数据框中的元素。

由于生统的数据一般只有两列,且比较长,可能不太适合演示,所以我这会用的还是之前糖尿病人的那个数据框。

> patientID <- c(1, 2, 3, 4)
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> patientdata <- data.frame(patientID, age, diabetes, status)
> patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

这次的内容参考了《R语言实战》的 4.10 部分,推荐大家可以去看一看。

数据框列的提取

根据坐标提取

跟我们之前介绍的向量读取差不多,也是可以利用坐标来读取。我们用坐标来提取第二列,即病人的年龄。

> patientdata[,2]
[1] 25 34 28 52

我们前面提到,逗号前面部分代表的是行索引(坐标可能更直白一点,但索引可能更正式一点,我还是用索引吧),逗号后面代表你要提取的列的索引。如果行的索引信息是缺失的话,那么就 R 就会默认你选择所有行。所以这里提取出了所有的 4 个病人的年龄。

根据列名提取

但这种坐标信息的提取是比较麻烦的,尤其是对于很多列的数据。你可能数不清你想要的那一列在第几列上。事实上,由于数据框的特殊数据格式,对于列的提取,也有了特殊的提取方式。因为数据框是一个二维数据结构,有行有列。意味着我们有行名和列名。所以在提取列的时候,我们也可以把列名放入原本数字索引在的地方,也可以达到跟数字索引提取同样的效果。

> patientdata[,"age"]
[1] 25 34 28 52

这里我们知道了我们的列名叫 age ,所以我们就把 age 加引号放入原本坐标在的那个地方,也顺利地提取出来了第二列,即病人的年龄。

$符号提取

数据框的提取还有一个简单的方式,就是在数据框后面加 $ 符号,然后就会自动跳出你的列名,你只要选择你想要的列名也可以顺利的提取出来。

> patientdata$age
[1] 25 34 28 52

提取多列

多于多列数据的提取,还是用到我们上面提到的提取方法。

# 数字索引提取
> patientdata[,c(2,4)]
  age    status
1  25      Poor
2  34  Improved
3  28 Excellent
4  52      Poor

# 列名提取
> patientdata[,c("age","status")]
  age    status
1  25      Poor
2  34  Improved
3  28 Excellent
4  52      Poor

# $符号可能不行

事实上,在提取列的时候,还有一个小问题,可能大家并没有发现。就是我们在提取单列的时候,得到的是一个向量型的结果,但我们在提取多列的时候,得到的是一个数据框型的结果。

> class(patientdata[,"age"])
[1] "numeric"

> class(patientdata[,c("age","status")])
[1] "data.frame"

这是因为 R 会在你提取单列的时候,自动将得到的单列进行降维,将数据框变成向量。如果你并不想让数据进行降维,可以设置 drop = F

> patientdata[,"age",drop = F]
  age
1  25
2  34
3  28
4  52

> class(patientdata[,"age",drop = F])
[1] "data.frame"

另一种在提取单列的时候,不降维的方法,就是你不遵循 [行索引,列索引] 这种格式,而是直接输入列索引,就像下面那样

> patientdata[2]
  age
1  25
2  34
3  28
4  52

> patientdata["age"]
  age
1  25
2  34
3  28
4  52

> class(patientdata["age"])
[1] "data.frame"

我个人不太推荐在生统做的时候用这个方式,还是建议老老实实按逗号的方式来提取,因为这样可能比较符合你的编程习惯。

但这种提出单列数据,自动降维的情况,对于我们生统是比较好的。因为像你后面做正态性检验等等,本质上你输入的应该是一串数值型的向量,而非是一个数据框。

数据框行的提取

行的提取跟列的提取很像,无非就是索引放在逗号前面。

# 根据数字索引
> patientdata[1,]
  patientID age diabetes status
1         1  25    Type1   Poor

# 根据行名
> patientdata["1",]
  patientID age diabetes status
1         1  25    Type1   Poor

大家可能会感到疑惑,1 和 "1" 难道不是一个东西么,事实上并不是。由于我们这里并没有给数据框赋予常见的那种行名,所以 R 会自动以数字即行号作为数据框的行名。所以 "1" 代表的其实是行名。这里为了更加清楚地展示,我们用人名来表示糖尿病人的行名。

# rownames可以赋予行名
rownames(patientdata) <- c("Paul","James","Wade", "Antony")

> patientdata
       patientID age diabetes    status
Paul           1  25    Type1      Poor
James          2  34    Type2  Improved
Wade           3  28    Type1 Excellent
Antony         4  52    Type1      Poor

# 根据行名
> patientdata["Paul",]
     patientID age diabetes status
Paul         1  25    Type1   Poor

其实生统的作业不太会让你对某一行进行提取,更多的是提取出符合某一条件的几行来。这个就要涉及到我们之前讲到过的逻辑运算符了,这部分我们下一节再讲。

行列的提取

学会了提取列,也学会了提取行,行列就是你在 [] 里面,逗号前后都加上索引。但这个可能在生统中用处不大。

> patientdata[1:2,2:3]
  age diabetes
1  25    Type1
2  34    Type2

参考文章

  • 《R语言实战》4.10

相关文章

  • 给女朋友写的生统资料_Part4

    上一节我们讲到了一些向量提取的操作。这一部分我们会讲一些数据框提取的操作。在R里面,数据框提取的基础操作跟向量很相...

  • 给女朋友写的生统资料_Part19

    聚类 聚类(clustering),指将样本分到不同的组中,使得同一组中的样本差异尽可能的小,而不同组中的样本差异...

  • 给女朋友写的生统资料_Part14

    之前我们提到了如果做多次的假设检验,就要考虑多重比较矫正的问题了。那有没有只用做一次检验就可以搞定的方法呢。其实是...

  • 给女朋友写的生统资料_Part15

    相关性 当我们在衡量两个变量的相关关系的时候,我们可以用协方差来进行描述。协方差的公式为 协即协同的意思,X的方差...

  • 给女朋友写的生统资料_Part11

    中心极限定理 中心极限定理 假设我们有一个总体,我们从总体中取出一个大小为5的样本。我们可以利用这个样本均值、方差...

  • 给女朋友写的生统资料_Part12

    我感觉到后面应该会讲的比较省略了,公式模板什么的套的比较多,因为主要是用来做考试复习和速查的。大家如果有什么疑问,...

  • 给女朋友写的生统资料_Part13

    Power(统计功效) 关于power,我觉得下面这张图已经解释的很好了。 当 H0 是正确的时候,拒绝了H0,就...

  • 给女朋友写的生统资料_Part16

    多元线性回归 多元线性回归的方程写为:其中代表第个预测变量,是对应的模型参数。可以解释为在所有其他预测变量保持不变...

  • 给女朋友写的生统资料_Part17

    逻辑斯蒂回归 我们之前提到的线性回归是利用X来预测Y,Y是连续型的数值变量。但有时候Y并不是连续型的变量,而是一种...

  • 给女朋友写的生统资料_Part18

    apply和function 差异基因的检验估计会用到function和apply。不过差异基因表达的functi...

网友评论

      本文标题:给女朋友写的生统资料_Part4

      本文链接:https://www.haomeiwen.com/subject/cefzoqtx.html