前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Day03 生信马拉松-data.frame

Day03 生信马拉松-data.frame

原创
作者头像
大冬仔
发布2023-08-11 15:42:05
2100
发布2023-08-11 15:42:05
举报
文章被收录于专栏:生信学习Marathon

1.data.frame来源

(1)用代码新建 data.frame()

(2)由已有数据转换或处理得到 matrix-->data.frame

(3)读取表格文件-read()

(4)R语言内置数据(iris、volcano)

2.新建和读取data.frame

2.1 新建data.frame

代码语言:javascript
复制
df1 <- data.frame(gene   = paste0("gene",1:4),
                 change  = rep(c("up","down"),each = 2),
                 score   = c(5,3,-2,-4))  # “=”左边为列名,右边为列的内容
df1

2.2 读取data.frame-以read()函数为主

代码语言:javascript
复制
df2 <- read.csv("gene.csv")  # read.csv()读取csv文件函数
df2

3.data.frame的属性

3.1 维度 dim(df1)

3.2 行数 nrow(df1)

3.3 列数 ncol(df1)

3.4 行名 rownames(df1)

3.5 列名 colnames(df1)

4.data.frame取子集 -"$"符 df1$gene

4.1 按坐标

代码语言:javascript
复制
df1[2,2] #[ ]内前面的数字为行,后面的数字为列
df1[2,] #提出第二行(包含行名)
df1[,2] #提出第二列
df1[c(1,3),1:2] #提出第1和3行,第1-2列

4.2 按名字

代码语言:javascript
复制
df1[,"gene"]
df1[,c('gene','change')]

4.2 按条件(逻辑值)

代码语言:javascript
复制
df1 <- data.frame(gene   = paste0("gene",1:4),
                  change  = rep(c("up","down"),each = 2),
                  score   = c(5,3,-2,-4))
df1[df1$score>0,] #提取score>0的行

4.3 筛选score > 0的基因

代码语言:javascript
复制
df1[df1$score > 0,1] #提取第1列中score>0的基因名
df1$gene[df1$score > 0] #同上 提取gene列中score>0的基因名

★拓展内容

1.提取data.frame的最后一列

代码语言:javascript
复制
df1[,3]
df1[,ncol(df1)] #ncol()可以输出列数,所以为最后一列

2.提取data.frame除最后一列的其他列

代码语言:javascript
复制
df1[,-ncol(df1)] #"-"表示反选,“!”处理逻辑型数据

3.按照data.frame的某一列对整个data.frame进行排序--利用order()函数

代码语言:javascript
复制
df1[order(df1$score),] #默认为升序
df1[order(df1$score, decreasing = T),] #降序排列

4.按照data.frame的某一列对整个data.frame进行去重--利用distinct()函数

代码语言:javascript
复制
library(dplyr)
df1 <- df1 %>% distinct(score,keep_all = T) #%>%为向右操作符
df1

5.data.frame修改

5.1 改一个格 e.p df1[3,3] <- 5

5.2 改一整列 e.p df1$score <- c(12,23,50,2)

5.3 增加新一列 e.p df1$p.value <- c(0.01,0.02,0.07,0.05)

5.4 改所有行/列名 即给向量重新赋值

e.p rownames(df1) <- c("r1","r2","r3","r4")

5.5 只修改某一行/列的名 e.p colnames(df1)[2] <- "CHANGE" 改所有行名

6.两个data.frame连接

代码语言:javascript
复制
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                    blood_type = c("A","B","O","AB"))
test1
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2

test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),
                    weight = c(140,145,110,138))
test3
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")#x对应test1,y对应test3
#如果需要data.frame合并保留不完整数据?merge()查询帮助文档

7.Matrix和List

7.1 Matrix

7.1.1 新建matrix: m <- matrix(1:9, nrow = 3)

7.1.2 给matrix加列名: colnames(m) <- c("a","b","c")

7.1.3 matrix提取--不支持"$"提取

代码语言:javascript
复制
m[2,]
m[,1]
m[2,3]
m[2:3,1:2]

7.1.4 matrix行与列名转置: t(m)

7.2 List

7.2.1 新建list

代码语言:javascript
复制
l <- list(m1 = matrix(1:9, nrow = 3),
          m2 = matrix(2:9, nrow = 2))
l

7.2.2 list提取

方法一: l[[2]] 提取第二个matrix

方法二: l$m2 提取第二个matrix

拓展知识:l[1]l[[1]]的区别

class(l[1])仍然是一个list

class(l[[1]])提取的是一个matrix

8.补充知识--向量中元素的名字和R中删除操作

8.1 向量中元素的名字

代码语言:javascript
复制
scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")  #给元素加名字
scores # 仍然是数值型向量
scores["jimmy"] #提取jimmy的分数
scores[c("jimmy","nicker")]
names(scores)[scores>60] #提取scores>60的names

8.2 删除

代码语言:javascript
复制
rm(l)  #删除list
rm(df1,df2) #删除data.frame
rm(list = ls()) #删除全部环境变量=清空

以上内容均引用自生信技能树

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.data.frame来源
  • 2.新建和读取data.frame
  • 3.data.frame的属性
  • 4.data.frame取子集 -"$"符 df1$gene
  • 5.data.frame修改
  • 6.两个data.frame连接
  • 7.Matrix和List
    • 7.1 Matrix
      • 7.2 List
      • 8.补充知识--向量中元素的名字和R中删除操作
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档