文章目录
一. Tips
- 区分大小写,下标从1开始
- 赋值符号:<- ,快捷键:alt+ -
- 注释:#,整段按行注释:ctrl+shift+C,不提供块注释功能
- vignette(“dplyr”) # 实用介绍性PDF,查看某个包的主要函数,包括介绍和示例
- 工作空间workspace:新建一个项目就是一个工作空间,里面可以有多个R程序文件。
- 选择某子部分使用$而不是.
# 常用函数:
getwd() # 查看当前工作空间目录
setwd("path") # set current workspace directory to this path
ls() # 列出当前工作空间中的所有对象
rm(对象列表) # 删除一或多个对象
rm(list=ls()) # 删除当前工作空间中的所有对象,清空工作空间
options(scipen = 200) # 取消科学计数法显示数据
- 路径使用双斜杠“\ \”或反斜杠“/”
- 安装包:install.packages(“dplyr”)
每次重启R,要重新加载包: library(dplyr)
二.数据结构
- 最基本:向量,标量认为是只含一个元素的向量。本质是一维数组,各元素数据类型相同,组合函数c()用来创建向量。
a[c(1,3,5)] # 通过下标访问向量a中的第1,3,5个元素
a[2:6] # 冒号:生成一个序列,即向量
- 二维:矩阵,数据类型必须相同。创建矩阵如下:
m <- matrix(1:20,nrow = 4,ncol = 5) # 4*5的矩阵,(不一定每个参数都有参数名)
# 可选参数(即有默认值):
# byrow = FALSE 默认按列填充
# dimnames = list(行名向量,列名向量) 指定字符型行名和列名
# 创建空矩阵
m <- matrix(NA,nrow = 4,ncol = 5)
m[3,c(1,2)] # 选择第3行第1,2列元素
m[i,] # 选择第i行元素
- 最常用:data frame,各列类型可不不同,一列的类型必须相同
data$col1 # 选择某一变量
data[,c(1,3:6)] # selest 第1,3,4,5,6列
- 最特殊:factor,类别型变量,包括无序型和有序型
f <- factor(c("l1","l2","l3")) # 默认因子的水平levels按字母顺序创建
# 可选参数:
# order = T # 有序因子
# levels = c("l3","l2","l1") # l3<l2<l1
# 将数值型变量转换为因子
f <- factor(c(1,2),levels = c(1,2),labels = c("male","female")) # level与label一一对应,标签labels将替代1,2在结果中输出
- 最复杂:list,一切都能包括,大饼卷一切。
好处:以一种简单的方式组织不相干的信息;当函数需要返回多个结果时可以放在一个列表中返回,很多R函数就是这么干的。
l <- list(object1,.....) # 创建列表
l <- list(name1=object1,.....) # 或者顺便命名
# 选择列表元素
l[[2]] # 选择列表的第2个元素,一定是双方括号!
l[["name1"]] # 选择名为name的元素,等价于l$name1
- 数组array:多维矩阵,创建方式:a <- array(数据向量,各维度大小),可选参数:dimnames = list(各维度名)
a <- array(1:24,c(2,3,4)) # 2*3*4的三维数组
- 动态扩展数据结构:将值赋给某数据结构中不存在的元素时,直接用新下标或新名字等着被赋值,好像本来就存在一样。
# 给数据框data中增加一列空值,名为new
data$new <- NA
三.数据输入与输出
输入
- 从csv读入
data <- read.csv("路径")
# 可选参数:
# stringsAsFactors = FALSE # 字符型不要默认读成因子型
- 从Excel读入,最好的方式是另存为csv文件
对于.xlsx,加载openxlsx包
对于.xls,如果另存为.csv不成功的话,另存为.xlsx.
library(openxlsx)
read.xlsx("路径",sheet=1,)
- 从SQLserver读入:加载RODBC包
library(RODBC) # ODBC数据库的连接sqlserver
# 建立连接
dbhandle <- odbcDriverConnect('driver={SQL Server};server=(local);database=数据库名;trusted_connection=true')
# 取出数据
data <- sqlQuery(channel = dbhandle,query = "SELECT等SQL查询语句")
# 关闭连接
odbcClose(dbhandle)
- 从MySQL读入:加载RMySQL包
library(RMySQL)
# 连接数据库
conn <- dbConnect(MySQL(), host="localhost", dbname="数据库名", user="root", password="密码")
# 设置中文字符集,否则不识别含中文的SQL语句,utf8不可以
dbSendQuery(conn,"SET NAMES gbk")
# 取出数据
data <- dbGetQuery(conn,"查询语句")
# 关闭连接
dbDisconnect(conn)
- 从分隔符文件读入
data <- read.table("路径",stringsAsFactors = FALSE,sep=',',header=T)
# 可选参数:
# header=T 将第一行作为列名,而不是第一行
输出
- cat()函数也用来输出,但它可以把多个参数连接起来再输出(具有paste()的功能),参数file=可以输出到文件
cat(stopInfo,'\n',"λ-hat:",lambda1,'\n',"方差估计:",Var,sep = "")
- print():一次只能输出一个变量
- 写入文件:write.table()
四.数据清洗常用方法
length(obj) # 查看对象个数
nchar(str) # 查看字符串的字符个数
class(obj) # 查看对象类型
str(data) # 查看各变量信息,数据类型,前几个取值
summary(data) # 查看各变量统计信息,数值型包括最值,平均数,四分位数,中位数;因子型包括各水平的频数
c(obj1,obj2,...) # 组合为一个向量
cbind(pbj1,obj2,...) # 按列合并对象
rbind(obj1,obj2,...) # 按行合并对象
within()
cut() # 将数值型变量划分为多个区间,返回因子
1. 运算符
逻辑运算符:<=, ==, !=, !非,&与,|或,a %in% b:(a是否在b中),返回T/F
算术运算符:乘方(^或**),求余数(x%%y),整除取整(x%/%y)
2.变量重命名
- names(data):返回data的所有列名
names(data)[2:4] <- c("n1","n2","n3") # 对data的第2:4列重命名
names(data)[1] <- "n0"
names(data)[ncol(data)] <- "n" # 最后一列
3.缺失值NA
- is.na(data): data的每个元素是否是缺失值,返回与data同样大小的TF
- sum(is.na(data)): 统计data中缺失值的个数,即将所有T加起来
- 很多数值函数中有 na.rm=T这个参数,可以提前忽略缺失值使用剩余值进行计算
- na.omit(data): 删除所有含缺失值的行,简单粗暴删除整行
4.类型转换
as.numeric() # 数值型
as.character() # 字符型
as.vector()
as.matrix()
as.data.frame()
as.factor()
as.logical()
5. 排序
- order(向量):默认升序,在排序变量前加负号为降序
注意:对字符向量x排序,不能直接排,用xtfrm(x)函数,就可以像数值型那样排,降序是-xtfrm(x)
原理是产生一个数字向量,该向量将按与x相同的顺序排序。 - 嵌套排序:order(向量1,向量2,……):先排序向量1,向量1相同时排向量2,…
newdata <- data[order(data$col1),] # 因为是对所有行排序,所以写在行下标这里
newdata <- data[order(data$col1,-data$col2,-xtfrm(data$col3)),] # 嵌套排序
6.合并
- 简单粗暴,直接对,要求列或行必须严格对应:rbind(),cbind()
- merge():连接,类似于SQL中的join,通过数据框之间的共有变量横向合并它们。只能连接两个数据框
m <- merge(data1,data2,by = "ID",all = T)
m1 <- merge(data1,data2,by = c("date","hour"),all = T)
# 可选参数:
# all=F:默认,只保留能连接上的,连接不上的丢弃
# all=T:全连接,连接不上的一方自动填NA,一对多时少数一方自动重复来对应多
7.筛选与剔除
- 按下标筛选行或列,使用二维的行列下标时需同时指定行与列,(使用名称则不需要,因为R清楚)
newdata <- data[,c(6:10,12)] # 筛选列,所有行
newdata <- data[,c(-6,-12)] # 剔除列
newdata$col6 <- NULL # 剔除列
newdata <- data[1:3,] # 选出前3行
newdata <- data[data$col=="a" & data$col2>0,] # 筛选符合条件的行,逻辑运算符产生TF序列,这样只筛选出T的行,
# 等价于which(筛选条件):which()作用于TF序列,返回T的索引
newdata <- data[which(data$col=="a" & data$col2>0),]
如果需要剔除很多变量,不如直接筛选出需要保留的变量。select()。
newda <- da %>% select(date,hour,nowTemp)
同时筛选行列的话,subset()函数取子集
newdata <- subset(data,subset = (gender=="male" & age<24),select = c(col1,col2,...))
# 可选参数:
# subset=: 逻辑表达式,要保留的行
# select=:向量,要保留的列
# 可以使用冒号表达式from:to创建向量,col1:col4,R会懂的,比如gender:col4之间的所有列
8. 随机抽样
sample(从中抽取元素的向量,要抽取的个数)
可选参数:replace=F,默认无放回抽样
> sample(1:12,3,replace = F)
[1] 6 10 11
9. 使用SQL语句操作数据框
sqldf包
sqldf():在数据框上使用SQL的select语句
install.packages("sqldf",destdir = "D:\\Softwares\\R\\R-3.6.1\\packages")
library(sqldf)
newdf <- sqldf("select * from OutTempreture where 温度=20",row.names=T)
# 可选参数:
# row.names=F:新数据是否保留原来的行名
四.数据管理
1. 数学函数
- abs(x): x的绝对值
- sqrt(x): x的平方根
- exp(x): 指数
- log(x): 自然对数ln(x)
- log10(x): 常用对数lg(x)
- 取整: ceiling(x):大于等于x的最小整数
floor(x):小于等于x的最大整数
trunc(x):向0方向截取整数部分 - 四舍五入:round(x,digits=n):指定n位小数
2. 统计函数
- mean(x):平均数,median(x):中位数,sd(x):标准差,var(x):方差
- range(x):值域,极差,sum(x):求和,min(x):最小值,max(x):最大值
- quantile(x,probs):求向量x的分位数,probs是分位点,在0-1之间,向量
- scale(x,center=T,scale=T):数据标准化,按列标准化,均值为0,标准差为1
3. 概率函数
占坑,有空来写。R语言实战P90。