前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >四、数据结构--数据框

四、数据结构--数据框

原创
作者头像
叮当猫DDM
发布2023-02-25 18:05:10
8060
发布2023-02-25 18:05:10
举报
文章被收录于专栏:叮当猫学生信

生信技能树学习之数据结构:数据框

数据框 data.frame 二维,

每列只允许一种数据类型。列与列之间相同或者不同没有要求。

约等于“表格”原因:数据框不是独立的文件,是二元内部的一个数据,电脑上可能并没有这样一个文件,不是在电脑上真实存在的文件;excel表格没有要求一列只有一种数据类型,而数据框要求一列只能有一种数据类型。

数据框可以导出为一个表格,但并不等于数据框就是表格。

一、数据框来源

(1)用代码新建

(2)由已有数据转换或处理得到

(3)读取表格文件

(4)R语言内置数据

### 打开R语言的那一刻,可以直接使用的数据。volcano,iris,letters(默认小写字母),LETTERS(默认大写字母)

二、新建和读取数据框

代码语言:javascript
复制
df1 <- data.frame(gene = paste0("gene",1:4),
                  change = rep(c("up","down"),each = 2),
                  score = c(5,3,-2,-4))
df1                

gene change score

1 gene1 up 5

2 gene2 up 3

3 gene3 down -2

4 gene4 down -4

代码语言:javascript
复制
df2 <- read.csv("gene.csv")      ###文件读取成功的关键是gene.csv这个文件已经在工作目录中
df2

gene change score

1 gene1 up 5

2 gene2 up 3

3 gene3 down -2

4 gene4 down -4

三、数据框属性

代码语言:javascript
复制
dim(df1)    [1] 4 3   #dim 维度,指数据框的行数和列数
nrow(df1)  [1] 4      #行的数量
ncol(df1)   [1] 3      #列的数量

#行名rownames,列名colnames

代码语言:javascript
复制
rownames(df1)     [1] "1" "2" "3" "4"
colnames(df1)      [1] "gene" "change" "score"

四、数据框取子集

4.1 按列取 $

$ 数据框取列,每次只能取出一列。

代码语言:javascript
复制
df1$score              [1] 5 3 -2 -4
mean(df1$score)        [1] 0.5

4.2 按坐标提取

代码语言:javascript
复制
df1[2,2]       [1] "up"
df1[2,]         ##取第二行全部。  生成的是数据框

gene change score

2 gene2 up 3

代码语言:javascript
复制
df1[,2]    ##取第二列全部   [1] "up" "up" "down" "down"。 生成的是向量

### 用[]取行时,取出的是数据框,因为一行的数据类型不确定。

### 用[]取列时,取出的是向量。因为数据框一列只允许出现一种数据类型。

代码语言:javascript
复制
df1[c(1,3),1:2]   #中括号里的逗号,表示维度的分割,前面是行,后面是列。取1,3行的第1,2列

gene change

1 gene1 up

3 gene3 down

4.3 按名字

代码语言:javascript
复制
df1[,"gene"]                [1] "gene1" "gene2" "gene3" "gene4"
df1[,c('gene','change')]       

$ 数据框取列,每次只能取出一列。[ , ]取列,可以取多列,只要把要取出的列写成一个向量就行。 gene change

1 gene1 up

2 gene2 up

3 gene3 down

4 gene4 down

4.4 按条件(逻辑值)

4.4.1 筛选score大于0的行

代码语言:javascript
复制
df1[df1$score>0,]

gene change score

1 gene1 up 5

2 gene2 up 3

4.4.2筛选score > 0的基因 得出的是基因的名字

代码语言:javascript
复制
df1[df1$score > 0,1]                ###按数据库取子集的方式,  [ , ]
df1[df1$score > 0,"gene"]       
df1$gene[df1$score > 0]      ##先把gene这一列提取出来,然后再根据逻辑值筛选

用于取子集的逻辑值向量,与x对应就行,不必由x生成。

4.4.3 筛选change=up的行

代码语言:javascript
复制
df1[df1$change=="up" ,]

gene change score

1 gene1 up 5

2 gene2 up 3

## 代码思维

### 如何取数据框的最后一列?

代码语言:javascript
复制
df1[,3]                  ## [1] 5 3 -2 -4
df1[,ncol(df1)]          ## [1] 5 3 -2 -4

#如何取数据框除了最后一列以外的其他列?

代码语言:javascript
复制
df1[,-ncol(df1)]        ### -可以给数字用, !可以给逻辑值用。

gene change

1 gene1 up

2 gene2 up

3 gene3 down

4 gene4 down

五、数据框修改

5.1 改一个格

代码语言:javascript
复制
df1[3,3] <- 5
df1

5.2 改一整列

代码语言:javascript
复制
df1$score <- c(12,23,50,2)         #存在原数据框中,表示修改
df1
df1$p.value <- c(0.01,0.02,0.07,0.05)     ##不存在原数据框,表示新增 ,新增一列叫p.value的列
df1

5.3 改行名和列名

代码语言:javascript
复制
rownames(df1) <- c("r1","r2","r3","r4")       ### 改全部行名
colnames(df1)[2] <- "CHANGE"       ##改一个列名

修改第二列的列名,就是修改【列名这个向量】第二个元素。 #练习题 #3-1.读取exercise. csv这个文件,赋值给test

代码语言:javascript
复制
test <- read.csv("exercise.csv")
test

#3-2.求test第一列数值的中位数

代码语言:javascript
复制
median(test$Petal.Length)     #[1] 4.6
median(test[,1])

#3-3.筛选test中,Species列的值为a或c的行

代码语言:javascript
复制
test[test$Species!="b",]
test[test$Species=="a"|test$Species=="c",]
test[test$Species %in% c("a","c"),]

#竖线两边连接的必须是逻辑值,后边如果直接写“c”,就相当于后面连接的是字符。

##### 错误代码。 test[test$Species == c("a","c"),]

不能写==,是因为在循环补齐的过程中==会把a,c看成一个整体

六、两个数据框的连接

代码语言:javascript
复制
merge(test1,test2,by="name")          ###共同列的列名
merge(test1,test3,by.x = "name",by.y = "NAME")   ###列名不同时连接   #默认x=test1 , y=test3

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、数据框来源
  • 二、新建和读取数据框
  • 三、数据框属性
  • 四、数据框取子集
    • 4.1 按列取 $
      • 4.2 按坐标提取
        • 4.3 按名字
          • 4.4 按条件(逻辑值)
            • 4.4.1 筛选score大于0的行
            • 4.4.2筛选score > 0的基因 得出的是基因的名字
            • 4.4.3 筛选change=up的行
        • 五、数据框修改
          • 5.1 改一个格
            • 5.2 改一整列
              • 5.3 改行名和列名
              • 六、两个数据框的连接
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档