给女朋友写的生统资料_Part4

上一节我们讲到了一些向量提取的操作。这一部分我们会讲一些数据框提取的操作。在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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,000评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,745评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,561评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,782评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,798评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,394评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,952评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,852评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,409评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,483评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,615评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,303评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,979评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,470评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,571评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,041评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,630评论 2 359