R学习笔记01 2021-01-25

R语言学习笔记01

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

基本操作

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,]1035
[2,]3044
chisq.test(a) #直接进行卡方检验

###以上是第一天学习的内容,接下来是第二天

#-----packages------------------------------------
install.packages('name of package')

install.packages(c(''alpha,beta''))#同时安装多个包

help(package='')#查看包的帮助文档

detach('')#移除包

remove.packages()#彻底删除
#--------------------------------------------

#--------R中的数据类型----------
#数值型
#字符串
#逻辑型:T/F
#日期型(日期变量为单独一类,比如日记、股票价格均、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,]12
[2,]34

现在可以看到数据是先把第一行填满,再去填第二行。
如果byrow=F,那么

byrow=F[,1][,2]
[1,]13
[2,]24

可以看到先把第一列填满,然后再填充第二列。

访问元素

#访问元素
x<-matrix(1:16,4,4,T)

x[1,2] #访问第一行第二列

x[4,c(2,2,3,4)]访问第4行的第额2234列的值

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>内容(c前边有个space需要删去)。

这段话是华文隶书写的

简书无法实现调整字体和位置的功能

列表

#----------
#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
#-----
*end of this day*


###缺失值的处理

#-----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')#用最多的一个进行填补
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页