R语言: 数据框

数据框中的数据结构

> aa
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    5    9   13   17   21
[2,]    2    6   10   14   18   22
[3,]    3    7   11   15   19   23
[4,]    4    8   12   16   20   24
> class(aa)
[1] "matrix" "array"

> bb <- as.data.frame(aa)
> bb
  V1 V2 V3 V4 V5 V6
1  1  5  9 13 17 21
2  2  6 10 14 18 22
3  3  7 11 15 19 23
4  4  8 12 16 20 24
> View(bb)  #现在bb这个数据框中的元素都是数值,其视图如下图一

> bb[2,3] <- "10"  #把bb中的一个元素变成字符串,则此列的所有元素都会变为字符串格式
> View(bb)
  • 此数据框中的所有元素都是数值,在表格中全部靠右排放


    图一.png
  • 此时数据框中第三列为字符串,其他列全是数值;在摆放时,字符串靠左,数值靠右


    图二.png
1. 数据框列名操作
  • 可以看成是一个表格,第一行为列名,称之为字段或者变量名
  • 数据框也是一个列表,是一个各元素等长的列表
1.1 提取数据框列名
b <- colnames(a) 

a : 数据框名称
b : 由数据框列名按顺序组成的向量

1.2 更改数据框列名
b <- c("FBgn","symbol","p_value","average","cluster") 
names(a) <- b

a : 数据框名称
b : 由数据框所有新列名按顺序排列而成的向量

2. 数据框中提取某一列
2.1 提出某列为数据框格式
b <- a[,2]

a : 数据框名称
b : 新的数据框名称
这个例子是:提取数据框a中的第2列,并把这个单列的数据框赋值给变量b,b则成为一个单列数据框

2.2 提出某列为向量格式
b <- a$gene

a : 数据框名称
b : 向量名称
$ : 表示对数据框中某一列的提取或者调用,后面根列名
这个例子是:提取数据框a中的第二列为向量,并把这个向量赋值给变量b

3.向数据框中添加一个新列
3.1 将向量作为一个新列添加到数据框中
b <- c("1","2","3","4")
a <- data.frame(a,b)

a : 将被添加列的数据框
b : 要添加为列的向量
如果数据框a是有列名的,则向量b的向量名会作为
这个例子是:把b这个向量作为最后一列添加到数据框a中,并把生成的新数据框赋值给变量a(整体上是对a添加新列)

3.2 将单列数据框添加到一个数据框中
a <- mutate(a,b)

a : 数据框名称
b : 一个单列数据框
这个例子是:把单列数据框b添加到数据框a的最后,新形成的数据框赋值给变量a(整体上是对a添加新列)

1.向数据框中添加一列
数据框名[["新列名"]] <- 新列值(长度一定和数据框原有列长度一致)
2.删除数据框中的某列
name.dataframe <- subset(name.dataframe, select = -列名 )   #删除固定列名的一列

4. 生成数据框

4.1 从矩阵生成数据框
> bb <- as.data.frame(aa)  #aa是一个矩阵,bb是一个数据框,矩阵中只能存在一种类型的数据,数据框中可以同时存在多种类型的数据
> is.list(bb)  #查看一个数据框是否是一个列表结构
[1] TRUE  #一个数据框也可以看作是一个列表,其中每列可以看作是列表中的一个元素

数据框中的变量取值

> aa <- data.frame(name=c("la","ls","ld","lf"),number=1:4,score=rnorm(4,2,1))
> aa
  name number score
1   la      1 3.284
2   ls      2 1.099
3   ld      3 1.241
4   lf      4 0.672

> aa[2,3]  #取一个元素
[1] 1.1

> aa[,2]  #取一列
[1] 1 2 3 4
> class(aa[,2])
[1] "integer"  
> is.vector(aa[,2])
[1] TRUE  #  数据框中一列的值取出来,得到一个向量

> aa[2,]  #取一行
  name number score
2   ls      2   1.1
> class(aa[2,])
[1] "data.frame"  #取出数据框的一行,得到一个数据框

> aa[c(T,F),]  #用逻辑值来取值,所给出的逻辑值向量会被循环使用,直到取完最后一个值
  name number score
1   la      1  3.28
3   ld      3  1.24

> aa[c(T,F,F),]  #用逻辑值来取值,所给出的逻辑值向量会被循环使用,直到取完最后一个值
  name number score
1   la      1 3.284
4   lf      4 0.672

> aa[,c("number","name")]  #通过列名来取列,所取的列会按照取列时的列名顺序来重新排列
  number name
1      1   la
2      2   ls
3      3   ld
4      4   lf

> grepl("ld",aa$name)
[1] FALSE FALSE  TRUE FALSE
> aa[grepl("ld",aa$name),]  #通过逻辑值来取值,配合grep函数来使用,效率会很高
  name number score
3   ld      3  1.24

> grep("ld",aa$name)
[1] 3
> aa[grep("ld",aa$name),]  #通过下标来取值
  name number score
3   ld      3  1.24

>aa[aa$name=="la",]  #根据行名直接进行取行

去除数据框中的某行或某列

> aa <- data.frame(name=c("la","ls","ld","lf"),number=1:4,score=rnorm(4,2,1))
> aa
  name number    score
1   la      1 1.754142
2   ls      2 3.141787
3   ld      3 3.857394
4   lf      4 2.634266

> bb <- aa[,-2]  #去除第二列,原数据框结构不会改变
> bb
  name    score
1   la 1.754142
2   ls 3.141787
3   ld 3.857394
4   lf 2.634266

> cc <- aa[-2,]  #去除第二行,原数据框结构不会改变
> cc
  name number    score
1   la      1 1.754142
3   ld      3 3.857394
4   lf      4 2.634266

5. 对数据框中的数值进行查找并且替换

> aa <- as.data.frame(matrix(1:20, c(4,5)))

> aa
  V1 V2 V3 V4 V5
1  1  5  9 13 17
2  2  6 10 14 18
3  3  7 11 15 19
4  4  8 12 16 20

> aa[3,4] <- "."
> aa[2,5] <- "."

> aa
  V1 V2 V3 V4 V5
1  1  5  9 13 17
2  2  6 10 14  .
3  3  7 11  . 19
4  4  8 12 16 20

> aa=="."  #对数据框中的特定字符或者数字进行查找,查找结果是布尔值构成的数据框
        V1    V2    V3    V4    V5
[1,] FALSE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE  TRUE
[3,] FALSE FALSE FALSE  TRUE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE
> aa[aa=="."] <- "kkkk"  #对特定位点的值进行替换
> aa
  V1 V2 V3   V4   V5
1  1  5  9   13   17
2  2  6 10   14 kkkk
3  3  7 11 kkkk   19
4  4  8 12   16   20

6. subset()

https://www.cnblogs.com/liujiaxin2018/p/13763799.html

来自于 base

根据某一列的值对数据框进行选择 : subset(data_frame_name, subset=column_name==value)
根据列名删除某列 : subset(data_frame_name, select=-column_name)

> kk <- as.data.frame(matrix(1:30, nrow = 6))
> kk[["Type"]] <- c(rep("AA",4), rep("BB",2))
> 
> subset(kk, subset=Type=="AA")   '#根据某一列的值对数据框进行选择
  V1 V2 V3 V4 V5 Type
1  1  7 13 19 25   AA
2  2  8 14 20 26   AA
3  3  9 15 21 27   AA
4  4 10 16 22 28   AA
> 
> subset(kk, select=-Type)   #根据列名删除某列
  V1 V2 V3 V4 V5
1  1  7 13 19 25
2  2  8 14 20 26
3  3  9 15 21 27
4  4 10 16 22 28
5  5 11 17 23 29
6  6 12 18 24 30
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容