#R的学习笔记01(R语言入门与数据分析. b站)

由于是从去年12月份到现在(1月25日)断续记录的notes,多且乱。
根据bilibili up:基因学苑的视频来学习的。


CSDN同款文章
baklib同款文章

--------------正文---------------

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容