R语言基础

一. Tips

  1. 区分大小写,下标从1开始
  2. 赋值符号:<- ,快捷键:alt+ -
  3. 注释:#,整段按行注释:ctrl+shift+C,不提供块注释功能
  4. vignette(“dplyr”) # 实用介绍性PDF,查看某个包的主要函数,包括介绍和示例
  5. 工作空间workspace:新建一个项目就是一个工作空间,里面可以有多个R程序文件。
  6. 选择某子部分使用$而不是.
# 常用函数:
getwd()                # 查看当前工作空间目录
setwd("path")          # set current workspace directory to this path
ls()                   # 列出当前工作空间中的所有对象
rm(对象列表)           # 删除一或多个对象
rm(list=ls())          # 删除当前工作空间中的所有对象,清空工作空间
options(scipen = 200)  # 取消科学计数法显示数据
  1. 路径使用双斜杠“\ \”或反斜杠“/”
  2. 安装包:install.packages(“dplyr”)
    每次重启R,要重新加载包: library(dplyr)

二.数据结构

  1. 最基本:向量,标量认为是只含一个元素的向量。本质是一维数组,各元素数据类型相同,组合函数c()用来创建向量。
a[c(1,3,5)]   # 通过下标访问向量a中的第1,3,5个元素
a[2:6]        # 冒号:生成一个序列,即向量
  1. 二维:矩阵,数据类型必须相同。创建矩阵如下:
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行元素
  1. 最常用:data frame,各列类型可不不同,一列的类型必须相同
data$col1   # 选择某一变量
data[,c(1,3:6)]  # selest 第1,3,4,5,6列
  1. 最特殊: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在结果中输出
  1. 最复杂:list,一切都能包括,大饼卷一切。
    好处:以一种简单的方式组织不相干的信息;当函数需要返回多个结果时可以放在一个列表中返回,很多R函数就是这么干的。
l <- list(object1,.....)   # 创建列表
l <- list(name1=object1,.....)   # 或者顺便命名

# 选择列表元素
l[[2]]  # 选择列表的第2个元素,一定是双方括号!
l[["name1"]]  # 选择名为name的元素,等价于l$name1
  1. 数组array:多维矩阵,创建方式:a <- array(数据向量,各维度大小),可选参数:dimnames = list(各维度名)
a <- array(1:24,c(2,3,4))  # 2*3*4的三维数组
  1. 动态扩展数据结构:将值赋给某数据结构中不存在的元素时,直接用新下标或新名字等着被赋值,好像本来就存在一样。
# 给数据框data中增加一列空值,名为new
data$new <- NA

三.数据输入与输出

输入
  1. 从csv读入
data <- read.csv("路径")
# 可选参数:
# stringsAsFactors = FALSE  # 字符型不要默认读成因子型
  1. 从Excel读入,最好的方式是另存为csv文件
    对于.xlsx,加载openxlsx包
    对于.xls,如果另存为.csv不成功的话,另存为.xlsx.
library(openxlsx)
read.xlsx("路径",sheet=1,)
  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)  
  1. 从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)
  1. 从分隔符文件读入
data <- read.table("路径",stringsAsFactors = FALSE,sep=',',header=T)
# 可选参数:
# header=T  将第一行作为列名,而不是第一行
输出
  1. cat()函数也用来输出,但它可以把多个参数连接起来再输出(具有paste()的功能),参数file=可以输出到文件
cat(stopInfo,'\n',"λ-hat:",lambda1,'\n',"方差估计:",Var,sep = "")
  1. print():一次只能输出一个变量
  2. 写入文件: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.变量重命名
  1. 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
  1. is.na(data): data的每个元素是否是缺失值,返回与data同样大小的TF
  2. sum(is.na(data)): 统计data中缺失值的个数,即将所有T加起来
  3. 很多数值函数中有 na.rm=T这个参数,可以提前忽略缺失值使用剩余值进行计算
  4. na.omit(data): 删除所有含缺失值的行,简单粗暴删除整行
4.类型转换
as.numeric()  # 数值型
as.character()  # 字符型
as.vector()
as.matrix()
as.data.frame()
as.factor()
as.logical()
5. 排序
  1. order(向量):默认升序,在排序变量前加负号为降序
    注意:对字符向量x排序,不能直接排,用xtfrm(x)函数,就可以像数值型那样排,降序是-xtfrm(x)
    原理是产生一个数字向量,该向量将按与x相同的顺序排序。
  2. 嵌套排序:order(向量1,向量2,……):先排序向量1,向量1相同时排向量2,…
newdata <- data[order(data$col1),]  # 因为是对所有行排序,所以写在行下标这里
newdata <- data[order(data$col1,-data$col2,-xtfrm(data$col3)),]  # 嵌套排序
6.合并
  1. 简单粗暴,直接对,要求列或行必须严格对应:rbind(),cbind()
  2. 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.筛选与剔除
  1. 按下标筛选行或列,使用二维的行列下标时需同时指定行与列,(使用名称则不需要,因为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。

4. 字符处理函数
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值