由于是从去年12月份到现在(1月25日)断续记录的notes,多且乱。
根据bilibili up:基因学苑的视频来学习的。
--------------正文---------------
2021-1-25整理
setwd('D:/0a文件夹/R') #set where to save this r file
getwd() #show where the file is
list.files()#show all other files in the same document
dir()#same as the above one
关于R中为什么不用‘=’:
1.=和<-的用法在某些地方有出入,用=会容易混淆。
=多用于编写自定义函数时形式参数的数据传参,以及不需要赋值的调用函数
例1:
> rm(list=ls(all=TRUE)) # 清除空间变量
> fun1 <- function(a = 1, b = 2){
+ a + b
+ } # 构建函数1,此时可以成功构建函数
> fun2 <- function(a <- 1, b <- 2){
错误: unexpected assignment in "fun2 <- function(a <-"
> a + b
错误: 找不到对象'a'
#此时则会出现两个错误,原因应该是数字1和2没有传递到a和b中
例2:
> fun1() # 函数1的调用
[1] 3
> fun1(a = 5, b = 6) # 函数1的调用
[1] 11
> a
错误: 找不到对象'a'
> b
错误: 找不到对象'b'
#用=时,函数在使用完成后a、b没有被赋值
> fun1(a <- 3, b <- 5) # 函数1的调用
[1] 8
> a
[1] 3
> b
[1] 5
#此时用完函数之后函数内的a、b两参数被赋值为3和5
2.该示例来自网站:洋流范儿。
>x = 2 #给x赋值为2
x=2
>x < -1 #判断x是否小于-1,返回逻辑值
FALSE
>x <- 1 #覆盖x先前的赋值,重新给x赋值为1
>x #显示x
-查看位置/含义
ls()#当前工作空间有哪些被赋值的字符
ls.str()#被赋值的字符的含义有什么
-删除
#删除
rm(x)
rm(a,b,c)
rm(list=ls())#delete all variables
#tap 'ctrl+l' then clear the screen
- 在R语言中,如果直接用history()命令查询历史命令,发现返回的条数有限。可以带一个返回命令条数的参数,返回更多的命令行,例如:
history()#
history(100)#查看历史命令记录
- 保存工作映像
save.image()
print('hello')
a <- c(10,30,35,44)
dim(a) <- c(2,2,byrow=T)#按行划分为2x2的向量
此时的a为
[,1] | [,2] | |
---|---|---|
[1,] | 10 | 35 |
[2,] | 30 | 44 |
chisq.test(a) #直接进行卡方检验
以上是第一天学习的内容,接下来是第二天
#-----packages------------------------------------
install.packages('name of package')
install.packages(c(''alpha,beta''))#同时安装多个包
help(package='')#查看包的帮助文档
detach('')#移除包
remove.packages()#彻底删除
#--------------------------------------------
#--------R中的数据类型----------
#数值型
#字符串
#逻辑型:T/F
#日期型(ts,日期变量为单独一类,比如日记、股票价格均、sunspots中均含有日期变量。日起变量有专门的处理方法)
#-------------------------------
关于字符串的处理方法在第26集
关于日期变量的处理方法在第26集
#------向量------
x <- c('1','2','3')#字符型,green(green和red为我的rstudio中显示的颜色)
y <- c(1,2,3)#数值型,red
#-----
#-----矩阵与数组-----
x <- 1:20
x <- matrix(x,4,5,byrow = T)#按照行来排列
dim(x)
dim1 <- c('a','b','c','d')
dim2 <- as.character(c(1:5))
dimnames(x) <- list(dim1,dim2)
dimnames(x)
关于matrix()的byrow=T一直很迷。
现在a<-c(1,2,3,4),matrix(a,2,2,byrow=T)之后得到的矩阵应该如下:
byrow=T | [,1] | [,2] |
---|---|---|
[1,] | 1 | 2 |
[2,] | 3 | 4 |
现在可以看到数据是先把第一行填满,再去填第二行。
如果byrow=F,那么
byrow=F | [,1] | [,2] |
---|---|---|
[1,] | 1 | 3 |
[2,] | 2 | 4 |
可以看到先把第一列填满,然后再填充第二列。
#访问元素
x<-matrix(1:16,4,4,T)
x[1,2] #访问第一行第二列
x[4,c(2,2,3,4)]访问第4行的第额2、2、3、4列的值
x[c(1,2),c(2,4)]#访问第(1,2)(1,4)(2,2)(2,4)这是个位置的元素
x[,-1]#不访问第一列
x['a',4:5]#访问第‘a’列,4、5行(‘a’为列的名字)
#矩阵求和/均值
colSums(x)
rowSums(x)
colMeans(x)
#内积(两两对应相乘)
m <- matrix(3:12,3,3,T)
y <- matrix(1:9,3,3,T)
m*y#内积
m%*%y#外积:前面的行对应x后面的列的和(和线性代数中矩阵的乘法类似)
y%*%m#y%*%m的外积与m%*%y的外积不同
#-----
关于外积:知乎LovePhysics的回答
百度百科的解释:
把向量外积定义为: [1]
符号表示:a× b
大小:|a|·|b|·sin<a,b>.
<center> 那些年逃过的数学,终究是要补回来的< /center>
实测发现简书无法实现居中
#----------
#state.center美国每个州的经纬度,列表。
a <- 1:20
b <- matrix(1:20,4)
c <- 'this is a word'
list_aaa <- list(a,b,c)#构建列表
list_aaa[1]
list_aaa <- list(first=a,second=b,third=c)
list_aaa['first']
list_aaa[['first']]
list_aaa$first
#about[] and [[]]:一个中括号相当于取出一节车厢加车头,两个中括号相当于单独拿出一列车厢。
#-----
来自:博客园 csguo:
列表是R语言中的对象,它包含不同类型的元素,比如 - 数字,字符串,向量和另一个列表等。一个列表还可以包含一个矩阵或一个函数作为它的元素。使用list()函数创建列表。
#-----数据框-----
data.frame(…,
row.names = NULL,
check.rows = F,
check.names = T,
fix.empty.names = T,
stringsAsFactors = default.stringsAsFactors() )
#…: 列向量,可以是任何类型(字符型、数值型、逻辑型),一般以 tag = value 的形式表示,也可以是 value。
#row.names: 行名,默认为 NULL,可以设置为单个数字、字符串或字符串和数字的向量。
#check.rows: 检测行的名称和长度是否一致。(默认为T)
#check.names: 检测数据框的变量名是否合法。(默认为F)
#fix.empty.names: 设置未命名的参数是否自动设置名字。
#stringsAsFactors: 布尔值,字符是否转换为因子,factory-fresh 的默认值是 TRUE,可以通过设置选项(stringsAsFactors=FALSE)来修改。
table = data.frame(
姓名 = c("张三", "李四"),
工号 = c("001","002"),
月薪 = c(1000, 2000)
)
str(table)# 获取数据结构
attach(mtcars)#将数据框添加在R的搜索框中。接下来可以不加‘mtcars’直接饮用里面的变量名。
detach(mtcars)
数据框
(Data frame)可以理解成我们常说的"表格"。是R的数据结构,特殊的二维列表。
数据框每一列都有一个唯一的列名,长度都是相等的,同一列的数据类型需要一致,不同列的数据类型可以不一样。
以上参考自:
新浪微博
菜鸟教程
#-----因子-----
#名义型、有序型、数量型
#名义型与有序型为因子,因子有不同水平,主要用来分类
f <- factor(c('red','red','green'))#定义因子
table(f)#查看f的频次
b <- c(T,T,F)
dataframe <- data.frame(f,b)
table(dataframe)#做一个二联表
b
f FALSE TRUE
green 1 0
red 0 2
week <- factor(c('mon','tus','wen','fri','sat','sun','sat','sun','sat','sun'),
ordered=T,
levels=c('mon','tus','wen','thu','fri','sat','sun'))
#ordered=T:按顺序排列,有顺序的。
plot(week)
#分段/分组
num <- 1:100
cut(num,c(seq(0,100,10)))#从0到100分组,两组间隔20
cut(num,10)#每组间隔为10
cut(num,c(10,30,60,100))分成10-30,30-60,60-100
#-----
<center>end of this day</center>
缺失值的处理
#-----NA-----
#NA:not available
#加入na.rm=T即移除缺失值
sum(x,na.rm = T)
is.na(x)#x中的数据是否为缺失值
x_na <- na.omit(x)#对于数据集x,会删除带有na 的行
a <- c(NA,NA,1:18)
a <- matrix(a,4)
a_na<-na.omit(a)
#几个处理缺失值的包
library('mvmle')#最大似然估计
library(Hmisc)#单个插补
library('Mi')#多重插补
library('Mice')#多重插补
#amelia;mitools
#不可能数值:NaN
#Inf:无穷大/小
-其他处理缺失值的视频:
bili up:Daitu_Adam
VIM
zoo
Hmisc
myair<-read.csv('C:add/add')
library(VIM)
aggr(myair)#可视化缺失值的位置
myair_na<-myair[!complete.cases(myair), ]#获取所有含有缺失值的数据
myair_no_na<-myair[complete.cases(myair), ]#索引时要加个逗号啊
myair_no_na<-na.omit(a)
myair$ozone[is.na(myair$ozone)]<-mean(myair$ozone,rm.an=T)#用ozone这一列的均值来填补缺失值
library(zoo)
myair$wind<- na.locf(myair$wind)#用缺失值前面的数据填补
myair$temp<- na.locf(myair$temp, formLast=T)#用缺失值后面的数据填补
library(Hmisc)
table(myair$type)#统计字符串个数
myair$type<-impute(myair$type,'C')#用最多的一个进行填补
2021-1-26整理
#----------------------数据读取--------
read.table('name.txt',header = F/T,sep = ',',nrows= , col.names = )
#读取txt文件,header:是否把首行当作表头,sep:分隔符
#nrows:最大读取行数,col.names:列名(header=T时col.name将其替换)
#incomplete final line found by readTableHeader on 'data-1.txt'
#try to加一行空格when u see such a waring.
#Error in make.names(col.names, unique = TRUE) : 多字节字符串2有错
#把中文表头改为英文
matrix(data= , nrow= , ncol= , byrow = F)#no need to tap 'nrow'&'ncol'
summary()#总结
str()#the same as above
dim()#查看维度,数据有几行几列
colSums()#列求和
#--------额外的知识--------
dat <- c('1','2','3','4')
dim(dat) <- c(2,2)
apply(dat,2,as.numeric)#文件名。1-行、2-列。as.numberic:转化为数值型
dat1 <- c(1,2,3,4)
dat2 <- c(2,3,4,5)
dim(dat1) <- c(2,2)
dim(dat2) <- c(2,2)
rbind(dat1,dat2)#在data1后边加上data2
cbind(dat1,dat2)#same as above
for (i in 1:n) {
x <- 1
}
cat()#catenate:连接字符串,可以直接显示连接后的函数
#-----
#----------12/23----------
seq(from=1,to= 10,by=2)
seq(from=0,to= 10,length.out =5)
rep(1,5)
x <- c(1,2,3)
rep(x,each=2)
rep(x,each=2,time,times=2)
#-----
#-----12/28-----
length()#向量长度
x <- c(1,2,3,4,5)
x[-1]#不输出第几个元素
x[c(1,4,2,1)]
x[c(T,F,F,T)]#输出逻辑值为真的数值,多余的逻辑值会输出NA
x[c(T,T,T,F,F,T)]
# %in% 判断字符是否在这个向量中
z <- c("one","two","three")
"one"%in%z
k <- z %in% c("one","two","three","four")
z[k]
#命名
y <- c(1,2,3,4)
names(y) <- c("a","b","c","d")
y["a"]
#添加向量
x[10] <-1
x
x[c(4,5,6)] <- c(12,23,45)
x
x1 <- append(x = x,values = 99,after = 2)#在第2个元素后边添加
x
x1
#修改向量
x[2] <- 98
x
#删除向量
rm(a)##删除整个向量
y1 <- y[-c(1:3)]
y1
T
#-----
#-----1/2-----
#for the second day of new year
a <- mtcars
name_abbr <- substr(names(a),1,2)#substr(x= , start= , stop= )
names(a) <- toupper(name_abbr)
a <- 'https://www.bilibili.com/video/BV1WK411H7ec?from=search&seid=9742757146822120287'
#-----
#-----
x <- c(342,61)
chisq.test(x)
#------字符串-----
#匹配单个列出的字符[···]
#排除性字符,匹配单个未列出的字符 [^···]
#匹配任意字母、数字、下划线 \w
#匹配任意空白字符\s
#匹配任意数字\d{2}:前面数字出现连续两次,
#匹配单词的开始或结束 \b
#转义字符 \char
#一些函数
nchar('hello world')#count the number of this character,including the space
length(c('hello','world','fuck u'))#count number of elements
a <- c('hello')
b <- c(1,2,3)
c <- c('world')
m <- paste(a,c)
paste('everybody','will','love','u',sep = '-')
length(m)
nchar(m)
paste(b,'is cool')
b1 <- c('a','b','c')
paste(b1,'is cool')
m.n <- month.name
m.a <- substr(m.n,start=1,stop=3)#提取字符串,从第1个到底3个
toupper(m.a)
tolower(m.a)
sub()
gsub()
grep()
x <- c('b','A+','AC')
grep('A+',x,fixed = T)#return 所要搜索的字符串的下标
grep('A+',x,fixed = F)
match("AC",x)#return 所要搜索的字符串的位置
b %in% x#向量b知否在x中(b <- c(1,2,)),依次匹配b中元素
"b"%in%x#字符b是否在x中
path <- '/users/local/bin/R'
strsplit(path,'/')#所得到的结果是list
face <-c('spandes','clubs','hearts','diamonds')
suit <- (1:13)
outer(suit,face,FUN = paste,sep='/')
#-----日期数据--1/25----
#1.描述已有日期内发生了什么
#2.预测未来将会发生什么
sunspots#太阳黑子数目
presidents#美国总统支持率
class(presidents)#ts代表时间序列
typeof(presidents)
airquality#空气质量
class(airquality)#data.frame
airmiles
class(airmiles)
Sys.Date()#show today
class(Sys.Date())#date
a <- '2021-01-25'
as.Date(a,format = "%Y-%m-%d")#Y is cap,m、d isnot
strftime
day <- seq(as.Date('2017-01-01'),as.Date('2020-01-25'),by=60)
sales <- round(runif(48, min=50, max=100))
ts(sales,start = c(2010,5),end=c(2014,4),frequency =1)#1:year,4:season,12:month