R语言学习笔记(部分)

r语言入门

1.基本操作

  #快捷键查询 alt + shift + k
  # 赋值 快捷键alt+-
  x <- 3
  
  #强赋值给一个全局变量<<-
  x <<- 3
  
  #求和
  sum(1,2,3,4,5)
  
  #平均值,mean是对第一个参数求平均值
  mean(1,2,3,4,5)
  mean(c(1,2,3,4,5))
  
  #查看已经定义的变量
  ls()
  ls.str()
  
  #查看单个变量的详细信息
  str(x)
  
  #
  ls(all.names = TRUE)
  
  #删除不需要的变量或者它们的值
  rm(x)
  #删除多个
  rm(a,b,x1,mtcars)
  #删除所有
  rm(list = ls())
  
  #清屏 Ctrl + L
  
  #保存
  save.image()

2.r包的安装

#R包的安装
#推荐在线安装:
install.packages("vcd")

#包所在的位置
.libPaths()

#查看已经安装的包
library()

#一次安装多个包,需要使用向量
install.packages(c("AER","ca"));

#更新包
update.packages()

3.r包的使用

#载入包
library(vcd)
require(vcd)

#r软件包的组成
#base 基础包,启动r的时候就会被包含进来
#datasets 数据集
#utils  工具包
#grDevices 图形显示兼容性,增加一些交互支持
#graphics 基于base图形的r函数
#stats
#methods 一般定义方法和类
#splines
#stats4
#tcltk

#help命令帮助使用包
help(package="vcd")
help(package="ggplot2")
library(help="vcd")

#索引
Arthritis  

#列出函数
ls("package:vcd")

#数据集
data(package="vcd")

#移除加载的包
detach("package:vcd")

#从硬盘上删除包——不常用
#remove.packages("vcd")

#r包的批量移植
#列出当前环境已安装的r包
installed.packages()

#取第一列
installed.packages()[,1]

#将所有r包的名字保存到一个文件
Rpack0 <- installed.packages()[,1]
save(Rpack,file = "Rpack.Rdata")

#在另一台电脑
Rpack1 <- load(file = "Rpack.Rdata")

#批量安装(r会跳过已安装的扩展包)
for (i in Rpack1) install.packages(i)

4.获取帮助

#在菜单栏直接打开help

#使用help函数
help.start()

#常用功能package Search Engine

#查询特定函数
help(sum)
?plot

#查询函数参数
args(plot)

#使用example来查看函数功能效果
Speed <- cars$speed
Distance <- cars$dist
plot(Speed, Distance, panel.first = grid(8, 8),
     pch = 0, cex = 1.2, col = "blue")
plot(Speed, Distance,
     panel.first = lines(stats::lowess(Speed, Distance), lty = "dashed"),
     pch = 0, cex = 1.2, col = "blue")

x <- 0:12
y <- sin(pi/5 * x)
op <- par(mfrow = c(3,3), mar = .1+ c(2,2,3,1))
for (tp in c("p","l","b",  "c","o","h",  "s","S","n")) {
  plot(y ~ x, type = tp, main = paste0("plot(*, type = \"", tp, "\")"))
  if(tp == "S") {
    lines(x, y, type = "s", col = "red", lty = 2)
    mtext("lines(*, type = \"s\", ...)", col = "red", cex = 0.8)
  }
}
par(op)

#也有example函数
example("plot")
example("hist")

#案例图
demo(graphics)

#查询某些包的帮助函数
help(package="ggplot2")

#更规范的查询(不是所有包都有该文档)
vignette()

#使用对应的文档需要事先载入包
library("vcd")
help("vcd")

#不加载包直接查询帮助
??vcd

# 本地搜索函数
help.search("heatmap")
??heatmap

#列出包含关键字的内容
apropos("sum")
apropos("sum",mode = "function")

#网络搜索
RSiteSearch("matlab")

5.excel案例

  • 一些excel的简单使用方法

6.内置数据集

help(package="datasets")

#列出数据集
data()

#使用数据集的方法:直接输入名称(可以把这些数据集看做系统定义的常量,比如Pi:π)
rivers

plot(rivers)
#一般情况下不需要对这些数据集进行赋值
#rivers <- c(1,2,3)

#常用的数据集
help(mtcars)

names(euro)

#美国州的情况
state <- data.frame(state.name,state.abb,state.area,state.division,state.region)
state

#火山区地理情况
heatmap(volcano)

#泰坦尼克成员统计
Titanic

#刹车
cars

#鸢尾花
iris
iris3

#数据集查询
data(package="MASS")
#显示所有可用的数据集
data(package=.packages(all.available = TRUE))

#单独加载数据集不加载R包
#data(<数据集名字>,package="")
data(Chile,package = "carData")
Chile

7.数据结构

#数据结构是计算机存储、组织数据的方式。
#数据类型:
#1.数值型
#2.字符串
#3.逻辑型
#4.日期型

#R对象 object 

#R的数据结构
#1.向量,标量
#2.数组
#3.矩阵
#……

8.向量

#向量 Vector 是构成其他数据结构的基础 向量是用于存储数值型,字符型或逻辑型数据的一堆数组

#-----
#创建向量 函数c
x <- c(1,2,3,4,5)
x

y <- c("one","two","three")
y

z <- c(T,F,T)
z

#快速构建向量
c(1:100)

seq(from=1,to=100,by=2)

#1到100内的十个等差值
seq(from=1,to=100,length.out=10)

#重复输出
rep(c(1,2,3),10)
rep(x,each=3)
rep(x,each=2,times=3)

#向量计算
y <- c(6,7,8,9,10)

x*2+y

#-----
#向量的索引
#1.正负整数索引
x <- c(1:100)
x[5]
x[-1]
x[c(4:18)]
#2.逻辑向量索引
y <- c(1:10)
y[c(T,F,T,T,F)]
y[y>5]
y[y>5 & y<9]
#3.名称索引
z <- c("one","two","three","four","five")
"one" %in% z
z["one" %in% z]

z %in% c("one","two")
k <- z %in% c("one","two")
z[k]

names(y) <- c("one","two","three","four","five","six","seven","eight","nine","ten")
y

#用名字访问向量
y["ten"]
euro["ATS"]

#-----
##修改向量
x[101] <- 101
x
v <- c(1:5)
v[20] <- 4
v

#-----
##插入元素
append(v,99,after = 4)

##删除向量
rm(v)

y <- y[-c(1:3)]

#------
#向量运算
x <- c(1:10)
x+1

y <- seq(1,100,length.out=10)

x+y
x*y
#幂运算
x**y
x^y

y;x

#取余运算
y%%x

#整除运算
y%/%x

#长度不同的向量运算
z <- c(1,2)
x+z

#长长度必须是短长度向量的背书,不然无法运算
z <- c(1,2,3)
x+z

#逻辑运算
x>5
x>y
x==y

#-----
##常用函数
#数学函数
abs(x)
sqrt(25)
log(16,2)
log10(10)
exp(x)

ceiling(-2.3)
floor(c(-2.3,4.5))
trunc(c(-2.3,4.5))
round(c(-2.3,4.5464),3)
signif(c(-2.3,4.5464),digits = 4)
sin(x)
cos(x)

#统计函数
vec <- c(1:100)
vec

sum(vec)
max(vec)
min(vec)
range(vec)
mean(vec)
#方差
var(vec)
round(var(vec),2)
#标准差
round(sd(vec),2)
#连乘
prod(vec)
#中位数
median(vec)
#分位数
quantile(vec)
quantile(vec,c(0.1,0.2,0.5,0.6))

#查询索引
t <- c(1,4,2,5,7,9,6)
which.max(t)
which(t==7)
which(t<7)
t[which(t<7)]

9.矩阵与数组

    #矩阵是二维的向量
    heatmap(state.x77)
    x <- 1:20
    m <- matrix(x,4,5)
    m
    
    #按行排列
    m <- matrix(x,4,5,byrow = T)
    m
    
    rnames <- c("r1","r2","r3","r4")
    cnames <- c("c1","c2","c3","c4","c5")
    dimnames(m) <- list(rnames,cnames)
    m
    
    #显示向量的维数
    dim(x)
    #把x变成矩阵
    dim(x) <- c(4,5)
    x
    dim(m)
    
    #r的数组是多维的矩阵
    x <- 1:20
    #创建数组
    dim(x) <- c(2,2,5)
    x
    
    dim1 <- c("a1","a2")
    dim2 <- c("b1","b2","b3")
    dim3 <- c("c1","c2","c3","c4")
    z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
    z
    
    #矩阵的索引
    m <- matrix(x,4,5,byrow = T)
    m
    
    m[1,2]
    m[1,c(2,3,4)]
    m[c(2,3),c(1,4)]
    m["r1","c2"]
    
    head(state.x77)
    
    #访问整行
    state.x77[,"Income"]
    
    #访问整列
    state.x77["Alabama",]
    
    #矩阵运算
    #数值矩阵与线性代数算法相同
    t <- m[1,]
    sum(t)
    colSums(m)
    rowSums(m)
    rowMeans(m)
    colMeans(m)
    
    #矩阵相乘
    n <- matrix(1:9,3,3)
    t <- matrix(2:10,3,3)
    
    #内积 点乘
    n*t
    
    #外积 叉乘
    n %*% t
    
    #求对角
    diag(n)
    n
    #转置
    t(n)

10.列表

#列表:列表式存储很多内容的一个集合
#列表可以存储若干向量、矩阵、数据框,甚至一些其他列表的组合

#在模式上与向量类似,列表对象是容量最大的容器
#美国每个州的经纬度
state.center

a <- 1:20
b <- matrix(1:20,4,5)
c <- mtcars
d <- "This is a test list"

mlist <- list(a,b,c,d)
mlist

mlist <- list(fisrt=a,second=b,third=c,fourth=d)
mlist

#列表的访问
mlist[1]
mlist[c(1,4)]

#查询名字:$
mlist$second

class(mlist[1])
class(mlist[[1]])

mlist[[5]] <- iris

#删除列表中的元素
mlist[[5]] <- NULL

11.数据框

#数据框是一种表格式的数据结构,数据集通常由数据构成的矩阵数组,航表示观测量,列表式变化量
#数据框实际上是列表。列表中的元素是向量,每一列长度相同,数据框的列必须命名

#创建数据框
state <- data.frame(state.name,state.abb,state.area)

#访问数据框
state[1]
state$state.area

plot(women$height,women$weight)
lm(weight ~height,data=women)

#用attach预加载不用再使用$符号
attach(mtcars)
mpg

#取消加载
detach(mtcars)

#with函数 with(<数据框名字>,[<列名称>])

12.因子

#因子,有序性变量和名义向变量,factor。这些分量的可能称之为一个水平,这些水平值构成的向量称为引子

#因子的应用:
#计算频数
#独立性检验
#相关性检验
#方差分析
#主成分分析
#因子分析

mtcars

table(mtcars$cyl)
f <- factor(c("red","red","blue","green","blue"))
f
week <- factor(c("Mon","Fri","Thu","Wed","Mon","Fri","Sun"),ordered = T,
               levels = c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"))
week

fcyl <- factor(mtcars$cyl)

plot(mtcars$cyl)
plot(fcyl)

num <- 1:100
cut(num,c(seq(0,100,10)))
#因子类型的数据
state.division
state.region

13.缺失数据

#缺失数据 NA存储缺失信息
#1.完全随机缺失
#2.随机缺失
#3.非随机缺失
1+NA
a <- c(NA,1:20)
sum(a)

#跳过缺失值
sum(a,na.rm = T)
mean(1:20)
mean(a,na.rm = T)

#查询是否存在缺失值 返回TRUE就存在
is.na(a)

#包已丢失,不再测试
install.packages("colorspace")
install.packages("data.table")
install.packages("VIM")
library(VIM)
RSiteSearch("VIM")

#生成没有缺失值的数据集
c <- na.omit(a)
c

is.na(c)
sum(c)

#NaN缺数数据,代表不可能的值
#lnf表示无穷    +lnf -lnf

is.nan(0/0)

14.字符串

#处理字符串的函数

#返回每个元素字符串的个数
nchar("Hello world")
month.name
nchar(month.name)
length(month.name)
nchar(c(12,2,345))

#字符串拼接函数
paste(c("Everybody","loves","stats"))
paste("Everybody","loves","stats" ,sep="-")

names <- c("alt","ctrl","shift")
paste(names,"love 1")

#提取字符串
temp <- substr(x=month.name,start = 1,stop = 3)
tolower(temp)
#替换
gsub("^(\\w)","\\U\\1",tolower(temp),perl = T)

#查找字符串 fixed=F 支持正则表达式 fixed=T 搜索模式为文本字符串
x <- c("b","A+","AC")
grep("A+",x,fixed = T)
grep("A+",x,fixed=F)
match("AC",x)

#字符串分割 返回列表
path <- "user/local/bin/R"
strsplit(path,"/")
strsplit(c(path,path),"/")

#生成字符串的成对组合
face <- 1:13
suit <- c("spades","clubs","hearts","diamonds")
outer(suit,face,FUN = paste)

15.日期和时间

#时间序列分析
#1.对时间序列的描述
#2.利用前面的结果进行预测

install.packages("timeSeries")
library(timeDate)
library(timeSeries)

airquality
class(airquality)
presidents
class(presidents)
airmiles
class(airmiles)

#查看当前系统时间
Sys.Date()

#字符转换成时间
a <- "2027-01-01"
as.Date(a)
class(as.Date(a))

as.Date(a,format = "%Y-%m-%d")
class(as.Date(a,format = "%Y-%m-%d"))

#创建连续的时间点
seq(as.Date("2022-01-03"),as.Date("2022-04-08"),by=5)
sales <- round(runif(48,min = 50,max=100))
sales
ts(sales,start = c(2022,01),end=c(2025,12),frequency = 4)
ts(sales,start = c(2022,01),end=c(2025,12),frequency = 12)

16.常见错误

17.获取数据

#获取数据的方法
#键盘
#外部文件
#数据库

#输入数据
patientID <- c(1,2,3,4)
admdate <- c("10/15/2009","11/01/2009","10/21/2009","10/28/2009")
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
data <- data.frame(patientID,admdate,age,diabetes,status)
data

#图形界面编辑数据
data2 <- data.frame(patientID=character(0)
                    ,admdate=character(0)
                    ,age=numeric()
                    ,diabetes=character()
                    ,status=character())
data2 <- edit(data2)
data2


#直接修改
fix(data2)

#安装连接数据库的包
install.packages("RODBC")
library(RODBC)
help("RODBC")

18.读写文件

#纯文本文件 read.table
setwd("E:/RLanguage")
x <- read.table("input.txt")

#截取信息
head(x);head(x,n=10)
tail(x)

#csv文件需要分割
read.csv("input.csv",sep=",")

#读取首行
x <- read.csv("input.csv",sep=",",header=T)
head(x)
read.csv("input.txt",header = T,skip = 5)

read.table("input 1.txt",header=T,,skip = 50,nrows=200)

#csv默认读取符号就是逗号
read.csv("input.csv")

read.fwf("fwf.txt",widths = c(3,3))

#----
#读取网络文件
#读取网络表格 用XML
library(XML)
readHTMLTable("https://en.wikipedia.org/wiki/World_population",which=3)

#读取其他软件格式的文件
help(package="foreign")

#读取剪切板
read.table("clipboard",header = T,sep = ",")
read.table("clipboard",header = T,sep = "\t")
readClipboard()

#读压缩包
read.table(gzfile("input.txt.gz"))

#读取非表格文件
readLines("input.csv",n=15)

scan("scan.txt",what = list(character(3),numeric(0),numeric(0)))

#----
#write将结果写入到文件里面
cat(rivers)
#获取工作目录
getwd()

#将读入的文件写到另一个文件当中
x <- read.table("input.txt",header = T)
write.table(x,file = "newfile.txt")
write.table(x,file = "newfile.csv",sep=",")

read.table("newfile.csv")
read.csv("newfile.csv")

#消除写入时的行号
write.table(x,file = "newfile.csv",sep=",",row.names = F)

#追加写入文件
write.table(iris,file = "newfile.csv",sep=",",append = T)

#写入压缩文件
write.table(mtcars,gzfile("mtcars.txt.gz"))

19.读写excel

#读写excel文件,载入之前需要先配置java环境变量,
#参考https://www.runoob.com/java/java-environment-setup.html
install.packages("rJava") 
install.packages("XLConnect")
library(rJava)
library(XLConnect)

#读文件
ex <- loadWorkbook("data.xlsx")
edata <- readWorksheet(ex,1)
head(edata)
readWorksheetFromFile("data.xlsx",1)

#写文件
wb <- loadWorkbook("file.xlsx",create = T)
createSheet(wb,"Sheet 1")
writeWorksheet(wb,data=mtcars,sheet = "Sheet 1")
saveWorkbook(wb)

writeWorksheetToFile("file1.xlsx",data = mtcars,sheet = "Sheet 1")

#查看XLConnect包的具体信息
vignette("XLConnect")
detach("package:XLConnect")
detach("package:rJava")
#----
#另一个包
install.packages("xlsx")
library(xlsx)
help(package=xlxs)
read.xlsx("data.xlsx",sheetIndex = 1)
write.xlsx(x,file = "rdata.xlsx",sheetName = "Sheet 1",append = F)

20.读写r文件

#写入r文件会有很多优点,r会自动对数据进行压缩处理,存储对象相关的r元数据
iris
saveRDS(iris,"iris.RDS")
x <- readRDS("iris.RDS")
x

#.Rdata 项目文件
load(".RData")
save(iris,iris3,file="iris3.Rdata")

21.数据转换

#数据转换:数据结构的变换
library(xlsx)
cars32 <- read.xlsx("mtcars.xlsx",sheetIndex = 1,header = T)
cars32
class(cars32)

#矩阵转数据框
is.data.frame(state.x77)
dstate.x77 <- as.data.frame(state.x77)
is.data.frame(dstate.x77)

#数据框转矩阵
as.matrix(data.frame(state.region,state.x77))

#不是所有的数据类型都能转化

methods(is)
methods(as)

#向量转其他类型
x <- state.abb
x
dim(x) <- c(5,10)
x
as.factor(x)
as.list(x)
state <- data.frame(x,state.region,state.x77)
state

state$Income
state["Nevada",]
is.data.frame(state["Nevada",])
y <- state["Nevada",] 
unname(y)    
unlist(y)

#----
#对数据取子集
who <- read.csv("WHO.csv",header = T)
head(who)

who1 <- who[c(1:50),c(1:10)]
View(who1)

who2 <- who[c(1,5,3,8),c(2,14,16,18)]
View(who2)

who$Continent
who3 <- who[which(who$Continent==7)]
who3

who4 <- who[which(who$CountryID>50&who$CountryID<=100),]
who4

#抽样
?sample
x <- 1:100
sample(x,30)
sort(sample(x,60,replace = T))
sample(who$CountryID,30,replace = T)
who[sample(who$CountryID,30),]

#删除固定行
x <- mtcars[-1:-5,]
x

x$mpg <- NULL
head(x)

#数据合并
state.division
data.frame(USArrests,state.division)
?cbind
cbind(USArrests,state.division)

#合并行要求新的数据与原来的数据具有相同的列名,否则无法合并
data1 <- head(USArrests)
data2 <- tail(USArrests)
rbind(data1,data2)

data3 <- head(cbind(USArrests,state.division),20)
rbind(data3,data2)

#合并时删除重复项
data1 <- head(USArrests,30)
data2 <- tail(USArrests,30)
data4 <- rbind(data1,data2)
duplicated(data4)
data4[duplicated(data4),]
data4[!duplicated(data4),]

length(row.names(data4[!duplicated(data4),]))
unique(data4)

#----
#数据框的转置
sractm <- t(mtcars)
sractm
?rev
letters
rev(letters)

women
row.names(women)
rev(row.names(women))
women[rev(row.names(women)),]

#进制转换
height_cm <- women$height*2.54
data.frame(height_cm,women$height)

?transform
transform(women,height=height*2.54)
transform(women,height_cm=height*2.54)

#向量的排序
sort(rivers)
sort(state.name)

rev(sort(rivers))
sort(rev(rivers))

order(rivers)#返回索引
#数据框的排序
mtcars[sort(row.names(mtcars)),]
mtcars[order(mtcars$mpg),]
mtcars[order(-mtcars$mpg),]
?rank
mtcars[order(mtcars$mpg,mtcars$disp),]

#----
#对数据框进行数学计算
WorldPhones
wp <- as.data.frame(WorldPhones)
rs <- rowSums(wp)
rs
mean <- colMeans(wp)
total <- cbind(wp,total=rs)
total
total <- rbind(total,mean)
total

#apply系列函数
?apply
apply(WorldPhones, MARGIN = 1, FUN = sum)
apply(WorldPhones,MARGIN = 2,FUN = mean)

?lapply
?sapply

lapply(state.center,FUN = length)
sapply(state.center,FUN = length)

?tapply
tapply(state.name, state.division, FUN = length)

#数据的中心化与标准化
#数据中心化:数据集各项数据减去均值
#数据标准化: 数据中心化之后的标准差

x <- c(3,5,2,5,7,8,6)
mean(c)

#中心化
x-mean(c)

#标准化
sd(x)
(x-mean(c))/sd(x)

#直接实现
?scale
scale(state.x77,center=T)
x <- scale(state.x77,center=T,scale=T)
head(x)
heatmap(x)

#----
#reshape2包
install.packages("reshape2")

x <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5),
                data = 1:5)
y <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5),
                data = 1:5)
merge(x,y,by="k1")
merge(x,y,by="k2",incomparables = T)
merge(x,y,by=c("k1","k2"))

library(reshape2)

#函数
help(package="reshape2")
airquality
names(airquality) <- tolower(names(airquality))
melt(airquality)

aql <- melt(airquality,id.vars = c("month","day"))
head(aql,50)

aqw <- dcast(aql,month+day ~variable)
aqw
aqw <- dcast(aql,month ~ variable,fun.aggregate = mean,na.rm=T)
aqw <- dcast(aql,month ~ variable,fun.aggregate = sum,na.rm=T)

#~符号,相关联

#----
#tidyr包
install.packages(c("tidyr","dplyr"))
library(tidyr)
library(dplyr)
help(package="tidyr")
mtcars[1:10,1:3]
tdata=mtcars[1:10,1:3]
tdata <- data.frame(names=rownames(tdata),tdata)
tdata

gather(tdata,key="Key",value="Value",cyl,disp,mpg)
gather(tdata,key="Key",value="Value",cyl,-disp)
gdata <- gather(tdata,key="Key",value="Value",2:4)
spread(gdata,key="Key",value="Value")

df <- data.frame(x=c(NA,"a.b","a.d","b.c"))
df
separate(df,col=x,into = c("A","B"))

df <- data.frame(x=c(NA,"a.b-c","a-d","b-c"))
x <- separate(df,col=x,into = c("A","B"),sep="-")
unite(x,col = "AB",A,B,sep="-")

iris
#dplyr包
ls("package:dplyr")
dplyr::filter(iris,Sepal.Length>7)
dplyr::slice(iris,10:15)

你可能感兴趣的:(R语言,笔记,r语言,开发语言)