欢迎光临散文网 会员登陆 & 注册

R语言学习笔记

2022-08-24 14:33 作者:拖着床的不二  | 我要投稿

数据导入

写法1:“文件名称”,如果不写路径,是会在当前路径下读取,可用getwd()获取当前路径。可用setwd(“路径”)修改当前路径。
写法2:绝对路径\文件名称,比如“D: \…\test.xlsx”。
写法2:“clipboard”,利用复制,然后读取  【x <- import("clipboard", header = T)】

#读取txt数据

read.table("file.txt", header=T)  #导入txt文本文件

#读取excel数据

library(readxl)  #加载程序包,读取.xlsx数据

cjb <- read_excel("E:/R语言/R语言学习/data/cjb.xlsx") #读取数据

#读取.csv数据

df <- read.csv("产品销售记录表.csv",header=,row.name=,clo.name=,skip=)

header:是否使用数据文件的第一行作为列名

row.name:指定行名称,可设置为FALSE

clo.name:指定列名称,可设置为FALSE

skip:很多时候数据较为复杂是,可以指定是否跳过文件的前几行读取。

数据基本处理

is.na-判断空值       is.na(x)  x:向量  

test =c('Hello', 'World',NA, 1,  2, 3) 

is.na(test)

test[! is.na(test)] #去除test中NA值

union-计算并集     union(x,y)     x, y:向量

union(1:4,2:5)#示例

union(1:4,8:10)   # union只可以处理俩个向量,那如何计算多个向量的并集呢

union(1:4,union(2:5,8:10))   # 这个例子是想强调:函数是可以叠加的,不同函数之间也是如此

intersect-计算交集      intersect(x,y)     x, y:向量

intersect(1:4,2:5) 

intersect(1:4,union(2:5,8:10))   #ips:先求并集,再求交集

setdiff-获取左向量的特有元素     setdiff(x,y)   x, y:向量

setdiff(1:4,2:5)     结果 1

seq-生成数值型向量   seq(from,to,by=,length.out=)

from:起始数值    to:终止数值      by:序列间隔,默认为1     length.out:将from-to区间划分为多少份,可简化为len

seq(1,9,by=3) # 生成1到9,以3为间隔的序列

seq(1,9,len=4) #将1到9的序列,划分为4等份

sample-随机抽取向量    sample(x,size,replace=FALSE)

x:待随机抽取的向量 size:抽取的次数,默认抽取length(x)次  replace:是否重复抽样

sample(1:10,5,rep=T) # 从1:10序列中随机放回抽取5次

 注意:        随机抽取意味着运行两次sample(1:10,5)得到的结果不一样

                   set.seed()可以重复随机结果

                   set.seed(1234) #括号里面的参数可以是任意数字,代表你设置的第几号种子,不参与运算,是个标记。

                   sample(1:10,5,rep=T)#重复两次结果一样

rep-重复向量       rep(x,each,times)   

x:待重复的向量    each:每一个元素重复的次数    times:向量整体重复次数

rep(c(1,  2, 3),2) # 向量整体重复2次

rep(c(1,  2, 3),each=2) # 向量的每一个元素依次重复2次

rep(c(1,  2, 3),1:3) # 向量的每一个元素重复不同次数 

rep(c(1,  2, 3),each=2, times=3) #向量每一个元素重复2次,总共重复3次

rev-反向排列向量   rev(x)     x:待反向排列的向量

rev(1:4)  #结果4321

table-频次统计     table(x)    x:待统计向量

table(c(1,2,2,4,7,1,1))    #结果 

sort-元素重排      sort(x, decreasing=FALSE)    

x: 待重排向量   decreasing: 降序排列,默认FALSE

order-求元素顺序     order(x, decreasing=FALSE)    

x: 待排序向量    decreasing: 降序排列,默认FALSE)

order(c('b','e','a')) # 返回排序的坐标值    结果 3 1 2

rank-求元素排名     rank(x)    x: 待求排名的向量

rank(c('b','e','a')) # 返回元素的排名  结果 2 3 1

tolower/ toupper字符串小/大写转换     tolower(x) /toupper(x)    x: 待转换字符串或字符串向量

sub-字符串替换   sub(pattern, replacement, x)   

pattern:待替换原始字符串模式   replacement:待替换目标字符串    x: 待转换字符串或字符串向量

sub("a","A",c("abcda","adcba")) #只替换每次字符串的第1个匹配

gsub("a","A",c("abcda","adcba")) #替换所有匹配

sub('a$', 'A', c("abcda","adcba")) #只替换位于末尾的a

sub('b.*a','Box', c("abcda","adcba")) # 替换从b到a的字符

sub('b.','Box', c("abcda","adcba"))  # 替换b和其后一位的字符

sub('b.+','Box', c("abcda","adcba")) # 替换从b之后的所有字符

sub('l.*l','AAAA','Hello World') #贪婪匹配:匹配尽可能多的字符

sub('l.*?l','AAAA','Hello World') #懒惰匹配:匹配最短的字串

substr 字符串截取  substr(x, start, stop)    

x:待截取字符串或字符串向量    start:起始位置    stop:终止位置

substr('Hello World', 1, 4)#截取第一到第四个位置上的字符

strsplit  字符串切割 strsplit(x, split)    x:待切割字符串或字符串向量    split:分隔符

strsplit("Hello World", ' ')                 #  返回列表形式  

unlist(strsplit('Hello World', ' '))   #Tips: strsplit返回结果形式为列表,可以通过unlist函数将列表转化为向量

paste-字符串连接  paste(…,sep="",collapse=NULL)  

...:一个或多个R对象  sep:元素分隔符  collapse:字符串分隔符

paste('Hello','World',sep=', ')      #结果"Hello, World"

paste('Hello','World',1, 2, 3,sep='_!_ ')       #结果"Hello_!_ World_!_ 1_!_ 2_!_ 3"

paste(c('Hello','World'),c(1, 2, 3),sep=', ')       #结果 "Hello, 1" "World, 2" "Hello, 3"

paste(c('Hello','World'),c(1, 2, 3),sep=', ',collapse = '; ')      #结果 "Hello, 1; World, 2; Hello, 3"

match-整词匹配    match(x,table)    x:待查询值    table:匹配模板

match(c('Hi', 'Wor', 2, 1, 3),c('Hello', 'World', 1, 2, 3))     #结果 NA NA  4  3  5

#Tips: match返回值为table中匹配x值的位置,没有匹配上返回NA; %in% 类似match,但是返回值为逻辑值

c('Hi', 'Wor',  2, 1, 3) %in% c('Hello', 'World', 1, 2, 3)     #结果FALSE FALSE  TRUE  TRUE  TRUE

grep关键字搜索   grep(pattern, x)   pattern:待搜索字符串模式    x: 待搜索字符串或字符串向量

grep('o',c('Hello', 'World', 1,  2, 3))     # 返回匹配上的位置     结果   1 2

grepl('o',c('Hello', 'World', 1,  2, 3))    # 返回逻辑值       结果  TRUE  TRUE FALSE FALSE FALSE

 Tips: match为整词匹配,grep为关键字匹配;match第一个参数可以是向量,grep第一个参数只能是字符;match不能使用正则,grep可以使用正则

na.omit  删除含有空值的行   na.omit(df)    df:数据框

apply  数据框循环   apply相比较for循环,可以提高运算效率

apply(X, MARGIN, FUN...)    X:数组、矩阵、数据框    MARGIN:1表示按行,2表示按列    FUN:调用函数

head(airquality)   #  airquality是R内置的示例数据集

apply(head(airquality), 1, mean)    #按行计算均值

subset-数据框截取  subset可以根据自定义条件截取数据框子集   subset(x,...,select) 

  x: 数据框    ...: 条件选择,主要针对行操作  select: 条件选择,主要针对列操作

head(airquality)     # airquality是R内置的示例数据集

head(subset(airquality,Temp > 80, select = c(Ozone,Temp)))    #选择 Temp>80的行,并且只展示Ozone和Temp列

head(subset(airquality, Day == 1, select = -Temp))       #选择Day=1的行,并且删除Temp列

split-数据框拆分    split可以根据某一列(因子型)将数据框拆分为不同子集

split(x, f)    x: 数据框    f: 因子型列表

head(iris) # iris为R内置数据集

class(iris$Species)     #       查看数据类型            Species列为因子型

levels(iris$Species)    # 查看Species的类别

split(iris,iris$Species)  #  iris数据框集按species拆分   

class(split(iris,iris$Species))   # 拆分后的数据类型为列表

names(split(iris,iris$Species)) # 拆分后的列表名称

head(split(iris,iris$Species)[['versicolor']]) # 查看拆分后的versicolor子集

merge-数据框合并   merge可以根据列名合并两个不同的数据框  

merge(x, y, by = intersect(names(x), names(y)),  by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all)   

x,y 要合并的两个数据集

by,用于连接两个数据集的列,intersect(a,b)值向量a,b的交集,names(x)指提取数据集x的列名 

by = intersect(names(x), names(y)) 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列 

也可以直接写为 by = ‘公共列名’ ,前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写

by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列   默认根据数据框列名自行判断

all,all.x,all.y:指定x和y的行是否应该全在输出文件   默认仅输出非空行

sort:by指定的列(即公共列)是否要排序

suffixes:指定除by外相同列名的后缀

incomparables:指定by中哪些单元不进行合并

df1 = data.frame(CustomerId = c(1:6), Product = c(rep("Toaster", 3), rep("Radio", 3)), Taste=c(rep("Sweet", 3), rep("bitter", 3))); df1

df2 = data.frame(CustomerId = c(2, 4, 7), State = c(rep("Alabama", 2), rep("Ohio", 1)), Flavour=c(rep("Sweet", 3), rep("bitter", 3))); df2

df3 = data.frame(CustomerId = c(1, 4, 7), Product = c("Toaster","Alabama", "Ohio")); df3

merge(x=df1, y=df2)   #默认根据 df1 、df2相同列 CustomerID进行合并

merge(x=df1, y=df3)  #默认根据 df1、 df3相同列 CustomerID、Product进行合并

merge(df1, df3, by="CustomerId")  #指定根据df1、df3相同列CustomerID进行合并

head(merge(df1, df2, by.x="Taste", by.y="Flavour")) #指定根据df1的Taste列、df2的Flavour列进行合并

merge(x=df1, y=df3, by="CustomerId", all=T) #指定根据df1、df3相同列CustomerID进行合并,输出所有内容

merge(x=df1, y=df3, by="CustomerId", all.x =T) #指定根据df1、df3相同列CustomerID进行合并,输出df1所有内容

merge(x=df1, y=df3, by="CustomerId", all.y = T) #指定根据df1、df3相同列CustomerID进行合并,输出df3所有内容

#Tips:

#is.na也可以判断数据框空值

is.na(merge(x=df1, y=df3, by="CustomerId", all.y = T))

#complete.cases可以判断数据框某一列是否全部为非空值

complete.cases(merge(x=df1, y=df3, by="CustomerId", all.y = T))

# na.omit可以删除空行

na.omit(merge(x=df1, y=df3, by="CustomerId", all.y = T))

aggregate(x, by, FUN, ..., simplify = TRUE, drop = TRUE)

aggregate函数应该是数据处理中常用到的函数,简单说有点类似sql语言中的group by,可以按照要求把数据打组聚合,然后对聚合以后的数据进行加和、求平均等各种操作。

#我们常用到的参数是:x, by, FUN。 x, 你想要计算的属性或者列。 by, 是一个list,可以指定一个或者多个列作为分组的基础。 FUN, 指定一个函数,用来计算,可以作用在所有分组的数据上面。

R语言学习笔记的评论 (共 条)

分享到微博请遵守国家法律