1.对于数据类型不理解:矩阵matrix和数据框dataframe有什么区别?列表怎么取?
矩阵(matrix)
是具有维度属性的向量,矩阵都是二维的,和向量类似,矩阵中也仅能包含一种数据类型。
创建矩阵的方法:
(1)直接创建matrix()
b = matrix(1:20, nrow = 5, ncol = 4)
(2)维度dim()
添加维度向量 dim()是将向量转变为矩阵的方法
a = 1:30
dim(a) = c(5,6)
数据框(data frame)
数据框中各列可以是不同类型的数据,每列是一个变量,每行是一个观测。数据框可以看成是矩阵的推广,也可看作一种特殊的列表对象,很多高级统计函数都会用到数据框。
创建数据框的方法:
数据框用函数data.frame()生成,语法是:data.frame(data1, data2, ...)
name <- c('Mr A', 'Mr B', 'Mr C')
group <- rep(1, 3)
score <- c(69, 71, 92)
df <- data.frame(name, group, score)
列表(list)
列表(list)是一种可包含多种不同类型对象的向量,是一些对象(或成分,component)的有序集合。一般比较少自己动手创建一个列表,可以用内置数据集来对列表进行探索。如R语言中的内置数据集state.center
:美国50个州中心的经度和纬度
# 美国50个州中心的经度和纬度
state.center
# 取这个列表中的第一个子列表:一层中括号[ ]
state.center[1]
# 取这个列表中的第一个元素:两层中括号[ ]
state.center[[1]]
# 取这个列表中的第一个元素,发现一个元素是一个向量,可以取这个向量的第一个元素
state.center[[1]][1]
2.安装R包的报错?
R语言中不同的包安装方式不用
普通的包可以用下面的命令安装
install.package('packagename')
library(packagename)
对于biocondutor里面的包(分成3种:数据包,功能包,注释包),需要用下面的命令安装
options()$repos
options()$BioC_mirror
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
BiocManager::install("packagename",ask = F,update = F)
library(packagename)
有时候会报错,如以下报错信息
pgerror.png
提示说不能移除已经安装的limma包,就是这个包已经安装过了,但是现在又装了一次,原先的那个没方法移除,新的包加载不了。
解决方法是这样的,先打开已经安装的包所在的路径1,然后手动删除掉,在进入刚刚下载的包所在的路径2,解压后放到路径1就好。然后在RStudio里面就可以library了。
3.rm(list = ls()) ;options(stringsAsFactors = F)
这两行命令可以清空环境,写代码的时候把这两行代码放在首行,可以避免很多不必要的报错。
4.不会组织项目.Rproj
写代码之前,新建一个文件夹,copy一个.Rproj
进去,然后双击就可以直接打开RStudio了,再在RStudio里面新建script写代码。
5.apply系列函数
apply
函数和lapply
可以理解“遍历”的意思。
apply
的用法是
apply(X, MARGIN, FUN, ...)
X是要传入的对象,可以是一个矩阵,也可以是一个数据框。MARGIN是指选行(用数字1表示),或者选列(用数字2表示),FUN是要执行的操作。完整的意思就是,对于X的每一行/列执行FUN的操作。
lapply
的用法是
lapply(list, function, ...)
对每列进行操作,非常适合数据框;输入的数据必须是list型。
举个例子
lapply(df, function(x) x+3)
对数据框df的每一列执行function操作,操作的内容是每接收一个x,就做x+3
6.数据类型的转换 is.matrix,as.matrix等系列函数
is.系列函数是判断变量是否属于某一类型,as.系列函数是转变类型
# 如判断变量b是否是矩阵matrix
is.matrix(b)
# 将b转换成数据框as.data.frame
# 如果没有重新赋值,则不改变原来的变量类型
as.data.frame(b)
class(b)
# 如果重新赋值了
b = as.data.frame(b)
b
7.read.table()读入的数据是一个因子
在运行read.table()前运行这行代码,可以避免这个问题
rm(list = ls()) ;options(stringsAsFactors = F)
8.merge函数
在R中可以使用merge()函数去合并两个数据框,这两个不同的数据框中有共同的列或行。
使用格式是:
merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), incomparables = NULL, ...)
x
,y
:用于合并的两个数据框
by
,by.x
,by.y
:用于连接两个数据集的列
intersect(a,b)
:值向量a,b的交集
names(x)
:指提取数据集x的列名
by = intersect(names(x), names(y))
: 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列 也可以直接写为 by = ‘公共列名’ ,前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写
all
,all.x
,all.y
:指定x和y的行是否应该全在输出文件
sort
:by指定的列是否要排序
suffixes
:指定除by外相同列名的后缀
incomparables
:指定by中哪些单元不进行合并
# 创建数据框w
> name = c('A','B','C','D')
> school = c('s1','s2','s1','s1')
> class = c(10, 5, 4, 11)
> w = data.frame(name, school, class)
> w
name school class
A s1 10
B s2 5
C s1 4
D s1 11
# 同上创建数据框q
> name = c('D','B','C','A')
> maths = c(80,89,55,90)
> English = c(88, 89, 32, 89)
> q = data.frame(name, maths, English)
> q
name maths English
D 80 88
B 89 89
C 55 32
A 90 89
# 用merge函数把w和q以name这一列匹配然后合并起来,赋值给m
m = merge(w,q,by = 'name')
m
name school class maths English
1 A s1 10 90 89
2 B s2 5 89 89
3 C s1 4 55 32
4 D s1 11 80 88
网友评论