R语言笔记Day1(二 数据框、矩阵和列表)

数据框、矩阵和列表

向量.png
矩阵.png

数据框.png
列表.png

1.数据框

1.1 来源

(1)在R中新建
(2)由已有数据转换或处理得到
(3)从文件中读取
(4)内置数据集

1.2 新建与读取数据框

options(stringsAsFactors = FALSE)#在读入数据时,遇到字符串之后,不将其转换为factors,仍然保留为字符串格式
新建方式1
df <- data.frame(gene = c("gene1","gene2","gene3"),#gene,sam,exp是列名
                 sam  = c("sample1","sample2","sample3"),
                 exp  = c(32,34,45))
df
新建方式2
df <- data.frame(gene  = paste0("gene",1:3),
                 sam   = paste0("sample",1:3),
                 exp   = c(32,34,45))
df
读取
df2 <- read.csv("gene.csv")
df2

1.3 数据框属性的描述

1) 维度;dim(行,列)nrow/ncol
> dim(df)
[1] 3 3
2)行、列名;rownames(df)/colnames(df)
> rownames(df)
[1] "1" "2" "3"
> colnames(df)
[1] "gene" "sam"  "exp" 
2)数据框取子集
# 一个维度是一个向量,向量取子集:e.g.  x[5]
# 数据框取子集:x[3,5],这表示数据框x内的[第三行,第五列]

1.4.数据框取子集;一个维度为一个向量

#1)定点
> df[2,2]
[1] "sample2"
#2)定行
> df[2,]
   gene     sam exp
2 gene2 sample2  34
#3)定列
> df[,2]
[1] "sample1" "sample2" "sample3"
#4)隔着取
> df[c(1,3),1:2]#因为是每个维度都是向量,且向量不相隔,所以c(1,3)
  gene     sam
1 gene1 sample1
3 gene3 sample3
#5)根据行名或列名取子集
#当行数和列数很多时,这个操作就很有用
> df[,"gene"]
[1] "gene1" "gene2" "gene3"
> df[,c('gene','exp')]
   gene exp
1 gene1  32
2 gene2  34
3 gene3  45
# 6)进阶,提取或者删除最后一行/列
> ncol(df)
[1] 3
> df[,ncol(df)]   #提取最后一列
[1] 32 34 45
> df[,-ncol(df)]  #删除最后一列
   gene     sam
1 gene1 sample1
2 gene2 sample2
3 gene3 sample3
# 7)提取列的常用操作
> df$exp   #符号$,按Tab键选中
[1] 32 34 45
# 8)能对向量进行的计算和统计,都能对df$exp做
• max(df$exp) 最大值
• min(df$exp) 最小值
• range(df$exp) 数值的范围
• mean(df$exp) 均值
• median(df$exp) 中位数
• var(df$exp) 方差
• sd(df$exp) 标准差
• length(df$exp) 长度
• sum(df$exp) 总和

1.5 数据框编辑

#编辑方式:取子集$或[] +赋值操作
a.修改数据
1)改一个格
> df[3,3]<- 5
> df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3   5
2)改一整列
> df$exp<-c(12,23,50);df
   gene     sam exp
1 gene1 sample1  12
2 gene2 sample2  23
3 gene3 sample3  50
3)直接增加一列
> df$abc <-c(23,15,37);df
   gene     sam exp abc
1 gene1 sample1  12  23
2 gene2 sample2  23  15
3 gene3 sample3  50  37
b.修改行/列名称
> rownames(df)
[1] "1" "2" "3"
> colnames(df)
[1] "gene" "sam"  "exp"  "abc"
> rownames(df) <- c("r1","r2","r3")   #行名
> rownames(df)
[1] "r1" "r2" "r3"
> df
    gene     sam exp abc
r1 gene1 sample1  12  23
r2 gene2 sample2  23  15
r3 gene3 sample3  50  37
> rownames(df)[2] = "x"   #注意该结构
> df
    gene     sam exp abc
r1 gene1 sample1  12  23
x  gene2 sample2  23  15
r3 gene3 sample3  50  37
  • 练习题

1.读取excise.csv,赋值给df。
> df=read.csv("excise.csv")
> df
     gene          s1          s2         s3
1   gene1 -0.02258879  0.96133416 -1.1586647
2   gene2 -1.74022070 -0.88615577  0.2377606
3   gene3 -1.31557781  1.43889437  0.8751975
4   gene4 -0.07796823 -1.03993791  0.5053183
5   gene5 -0.60799720  0.46511225  0.4009092
6   gene6 -0.58853428 -0.05467347 -0.4162721
2.提取行名和列名
> rownames(df)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13"
[14] "14" "15"
> colnames(df)
[1] "gene" "s1"   "s2"   "s3" 
3.提取第二行
> df[2,]
   gene        s1         s2        s3
2 gene2 -1.740221 -0.8861558 0.2377606
4.提取第3行第4列
> df[3,4]
[1] 0.8751975
5.求第二列最大值和最小值
> max(df[,2]) #最大值
[1] 2.14664
> min(df[,2])  #最小值
[1] -1.819106
> range(df[,2])  #极值
[1] -1.819106  2.146640
6.按照列名提取s1,s3列
> df[,c("s1","s3")]
            s1         s3
1  -0.02258879 -1.1586647
2  -1.74022070  0.2377606
3  -1.31557781  0.8751975
4  -0.07796823  0.5053183
5  -0.60799720  0.4009092
6  -0.58853428 -0.4162721
7.修改后三列列名为“sample1”,“sample2”,“sample3”
方法一:直接赋值
> colnames(df) <- c("gene","sample1","sample2","sample3") #应该有更好的办法
> colnames(df)
[1] "gene"    "sample1" "sample2" "sample3"
方法二:推荐这种取子集
colnames(df)[2:4] <- c("sample1","sample2","sample3")
> head(df)
   gene     sample1     sample2    sample3
1 gene1 -0.02258879  0.96133416 -1.1586647
2 gene2 -1.74022070 -0.88615577  0.2377606
3 gene3 -1.31557781  1.43889437  0.8751975
4 gene4 -0.07796823 -1.03993791  0.5053183
5 gene5 -0.60799720  0.46511225  0.4009092
6 gene6 -0.58853428 -0.05467347 -0.4162721
8.筛选sample3列大于0的行
> df$sample3>0
 [1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
[12]  TRUE FALSE  TRUE  TRUE
> df$sample3[df$sample3>0]
 [1] 0.2377606 0.8751975 0.5053183 0.4009092 0.3391273 0.1525497
 [7] 0.3251973 0.3016595 0.6108655 0.1627136 0.9300770

1.6 数据的进阶

(1) 转置--行变列,列变行: t(df)
> df1=read.csv("gene.csv")
> df1
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
> t(df1)
     [,1]      [,2]      [,3]     
gene "gene1"   "gene2"   "gene3"  
sam  "sample1" "sample2" "sample3"
exp  "32"      "34"      "45" 
(2)去除含有缺失值的行: na.omit(df)
> df2=read.csv("na.omit.csv")
> df2
  x1 x2
1  A  1
2  B NA
3  C  3
4     4
5  E  5
> na.omit(df2)# 按行删除;仅按照某一列来去除缺失值、缺失值替换: tidyr包
  x1 x2
1  A  1
3  C  3
4     4
5  E  5
(3)两个表格的连接:
#交集、并集、补集、全集等,参照dplyr包
按列连接: cbind   行数相同
按行连接: rbind   列数相同
merge()   根据某一相同列合并
如下图所示
(4)行数较多的数据框可截取前/后几行查看
> head(df)
   gene     sample1     sample2    sample3
1 gene1 -0.02258879  0.96133416 -1.1586647
2 gene2 -1.74022070 -0.88615577  0.2377606
3 gene3 -1.31557781  1.43889437  0.8751975
4 gene4 -0.07796823 -1.03993791  0.5053183
5 gene5 -0.60799720  0.46511225  0.4009092
6 gene6 -0.58853428 -0.05467347 -0.4162721
> df[1:3,1:3]
   gene     sample1    sample2
1 gene1 -0.02258879  0.9613342
2 gene2 -1.74022070 -0.8861558
3 gene3 -1.31557781  1.4388944

(6) 查看每一列的数据类型和具体内容
> str(df)
'data.frame':   15 obs. of  4 variables:
 $ gene   : chr  "gene1" "gene2" "gene3" "gene4" ...
 $ sample1: num  -0.0226 -1.7402 -1.3156 -0.078 -0.608 ...
 $ sample2: num  0.961 -0.886 1.439 -1.04 0.465 ...
 $ sample3: num  -1.159 0.238 0.875 0.505 0.401 ...
(7)如果列名顺序错乱,如何按照指定顺序重排?
#上一期可以讲过了

(8)总结一些函数
t()   #转置
head(),tail() #截取头/ 尾
cbind(),rbind(),merge()   #连接
str()  #查看详情

顺序重排链接

黄cbind按列+蓝rbind按行.png

merge.png

1.7 矩阵、列表新建和取子集

1)矩阵新建
> m <- matrix(1:9, nrow = 3)
> m
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
取子集
> m[1,3]
[1] 7
> m[,2]
[1] 4 5 6
> m[3,]
[1] 3 6 9
> m[1:2,2:3]
     [,1] [,2]
[1,]    4    7
[2,]    5    8
2)列表新建
> i <- list(m=matrix(1:9, nrow = 3),df=data.frame(gene=paste0("gene",1:3),sam=paste0("sample",1:3),exp=c(32,34,45)),x=c(1,3,5))

表达一
> i
$m
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

$df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45

$x
[1] 1 3 5
> i[1]
表达二
> i[2]
$df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
> i[[2]]
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
> i$df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
  • 删除函数

  • 删除一个 rm(l)
  • 删除多个 rm(df,m)
  • 删除全部 rm(list = ls())
  • 清空控制台 ctrl+l
新建 取子集
向量x x<-c( ) x[n] 修改元素
数据框df df<-data.frame( ) df[x,y] , df[x,] ,df[,y], $ 新增列,修改
矩阵 m m<–matrix( ) m[x,y]…
列表 l l<-list( ) l[[n]], $

1.8 元素的“名字”-names()

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