提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 1.class()与mode()
- 2.数据框索引方式的区别
- 3.递归函数
- 4.print()和cat()
- 5.\r, \n, \r\n
- 6.向量中的数据类型
- 7.ggplot2初探
- 8. Loess (locally weighted regression) 局部加权回归
- 9.options(scipen= )默认函数
- 10.计算机基础—字符编码
- 11.字符乱码原因分析与解决方案
- 12.ls(),list.files()
- 13.file, folder, directory
- 14.file.path()
- 15.principal component analysis(PCA)
- 16.NA 与logical expression ;my_data == NA & my_data==1
- 17.函数学习
- 18.向量中不同元素转换的优先级
- 19."1L"和"1"的区别
- 20.R中含%符号含义
- 21.函数expression
- 22.R中的概率函数
- 23.table() 值得仔细研究
- 24.R语言中双冒号的作用是?
- 25.R 属性概念?
- 26.vector的扩展
- 27.行合并&列合并
- 28.算数函数汇总
- 29.apply函数族
- 30.read.csv()&read_csv()
- 31.tibble
- 32.grep()与正则表达式的运用
- 33. summarise()
- 34.向量知识点及函数汇总
- 35.排序函数
- 36.当if语句进行多个条件判断
- 37. read_csv 读入“csv”文件类型 & group_by() 进行分组
- 38. all() & any()
- 39.R 中茎叶图绘制stem()
- 40.R中正则表达式的使用
- 41.去除向量中的重复并提取为不含重复的新向量
- 42.几个取整函数
- 43.R——对表格进行连接,并匹配2个对应的值
前言
遇到的新概念,新名词,归纳总结
提示:以下是本篇文章正文内容,下面案例可供参考
1.class()与mode()
函数 | 作用 |
---|---|
class() | 查看数据结构 |
mode() | 查看数据类型 |
typeof() | 和mode差不多,但比mode分得更精细 |
从精细度上说,typeof>mode
class 和 typeof,mode不是一类
reference:link1;link2
2.数据框索引方式的区别
数据框索引 |
---|
x[i,j] 下标为(i,j)的元素 |
x[i, ] 第i行 |
x[ ,j] 第j列 |
x[c(m,n), ] 第m和n行 |
x[ ,c(m,n)] 第m和n列 |
x[c(m:n), ] 第m到n行 |
x[ ,c(m:n)] 第m到n列 |
x[“name”, ] 名为“name”的行 |
x[ ,“name”] 名为“name”的列 |
布尔向量索引: x[name>n,]name为某一列名,且数据框通过attach()添加到R的搜索路径中了 |
索引方法 | 返回值数据结构 |
---|---|
mydata[1,] | data.frame |
mydata[,1] | vector |
mydata$v1 | vector |
drop() | 修改返回值的数据结构 |
-
mydata$V1,mydata[, 1]索引的返回值是向量
- 因为R的缺省规则是返回一个维数尽可能低的值 - 可通过选项drop() 修改 ps:tibble是增强型数据框,当tibble索引时,遇到单行单列也不会降维,依旧返回数据框结构,而非向量。
> r[,3,drop=F]#设置drop=F
Wind
1 7.4
2 8.0
3 12.6
4 11.5
5 14.3
6 14.9
7 8.6
8 13.8
9 20.1
10 8.6
> r[,3]#未设置drop
[1] 7.4 8.0 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6
-
mydata[2,]返回值是数据框
因为每一行会包含不同的数据类型
> mydata[2,]
x2 sumx meanx x3 NULL. x4 x5
2 5 6 3 2 2 9 9
- mydata[“V1”]返回值是数据框
> q["X"]#得到的是数据框
X
1 Mazda RX4
2 Mazda RX4 Wag
3 Datsun 710
4 Hornet 4 Drive
5 Hornet Sportabout
6 Valiant
7 Duster 360
8 Merc 240D
9 Merc 230
> q[,1]#得到的是向量
[1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive"
[5] "Hornet Sportabout" "Valiant" "Duster 360" "Merc 240D"
[9] "Merc 230" "Merc 280" "Merc 280C" "Merc 450SE"
> r <- e[1:10,1:6]#得到的是数据框
> r
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
7 23 299 8.6 65 5 7
8 19 99 13.8 59 5 8
9 8 19 20.1 61 5 9
10 NA 194 8.6 69 5 10
-
列表中下标索引
x$y 是 x[["y"]]的简写 #返回的都是元素
3.递归函数
-
定义
如果一个函数在内部调用自身本身,这个函数就是递归函数。
-
示例
举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出:fact(n)=n!=n!=1×2×3×⋅⋅⋅×(n−1)×n=(n−1)!×n=fact(n−1)×n,所以,fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。
-
reference:link
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
4.print()和cat()
5.\r, \n, \r\n
(参考:link)
代码 | 意义 |
---|---|
\r | carriage return (回车—回到此行最左列) |
\n | line feed(换行—下移一行) |
\r\n | enter(回车+换行) |
\t | 空格(linux中使用方式,R中还没遇到过) |
> var.1=c(0,1,2,3)
> var.1
[1] 0 1 2 3
> var.2=c("learn","R")
> var.2
[1] "learn" "R"
"\r"
> cat("var.1 is",var.1,"\r","var.2 is",var.2)
> var.2 is learn R
> #var.1 is 0 1 2 3(var.2 is learn R正好覆盖前面的一整串)
> var.2 is learn R
> cat("var.1 is",var.1,"\r","var.2",var.2)
> var.2 learn R 3
> #var.1 is 0 1 2 3(var.2 learn R覆盖前面的var.1 is 0 1 ,剩下2 3,但为什么返回值是var.2 learn R 3而不是var.2 learn R2 3)
> cat("var.1 is",var.1,"\r","var.2 ",var.2)
> var.2 learn R3 (var.2 learn R覆盖前面的var.1 0 1 2 3,但为什么返回值是var.2 learn R3而不是var.2 learn R 3 ```
>cat("var.1 is",var.1,"\r","var.2 ",var.2)
>var.2 learn R
>***
# 在每句话的最后应该还有一个值覆盖

"\n"
>cat("var.1 is",var.1,"\n","var.2 is",var.2)
var.1 is 0 1 2 3
var.2 is learn R
> cat(" var.1 is",var.1,"\n","var.2 is",var.2)
var.1 is 0 1 2 3
var.2 is learn R
#换行后会空一格
"\r\n"
> cat("var.1 is",var.1,"\r\n","var.2 is",var.2)
var.1 is 0 1 2 3
var.2 is learn R
> cat(" var.1 is",var.1,"\r\n","var.2 is",var.2)
var.1 is 0 1 2 3
var.2 is learn R
#换行加回车,第二行覆盖的是空白,所以看不出来
6.向量中的数据类型
- vector()中只能包含有一种数据类型
- vector()中赋值时如果有两种数据类型,则会转换成一种
> i <- c(T,1)
> i
[1] 1 1
> i1 <- c(1,T)
> i1
[1] 1 1
#逻辑型均转换成数值型
7.ggplot2初探
-
绘图逻辑——图层叠加
-
数据准备——dataframe 结构
-
需要加载的包
1.tidyverse
2.ggplot2
3.cowplot
4.dplyr -
图层
-
ggplot() 图层:数据和映射
-
geom_XXX()图层:绘图类型和基本属性
-
scale_XXX()图层:标度图层(标准和尺度)
-
facet_grid()图层:图层分面,数据分子集绘图
-
theme()图层:主题图层,宏观性的文字调整和颜色搭配
1.legend.position() Description: the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector) 其中: 两元素向量:c(x,y) 1. x,y相当于在坐标平面内进行定位 2. x,y值区间为[0,1]
-
labs()图层:添加标签。x,y轴标题和总的title
5.ggplot2绘图函数模板
-
ggplot(data = , aes(x = , y = )) +
geom_XXX(...) + ... + stat_XXX(...) + ... +
annotate(...) + ... +
scale_XXX(...) + coord_XXX(...) + guides(...) + theme(...)
-
绘图实例
-
边界散点图(Scatterplot with Encirling)
1. 包的准备:ggplot2,ggalt
2. 数据准备
1)参数默认
2)构建或提取数据框
3. 图层绘制
1)基本图层——画布,坐标轴数据
ggplot(data= ,aes(x= ,y= ))
2)绘图类型——绘图的基本属性(点,线的大小,颜色等)[points, smoothing line, encircle]
3) 标签 -
边缘箱图/直方图(Marginal Histogram / Boxplot)
- 包的准备:ggplot2,ggExtra
- 数据准备
1)从包中搜索下载数据集{data()}
2)构建或提取数据框 - 图层绘制
1)提前设置主题参数
2)基本图层——画布,坐标轴数据
3)绘图类型——绘图的基本属性(点,线的大小,颜色,对应位置计数等)[points, smoothing line, encircle]
4)绘制边缘直方图(利用基本图层)
5)绘制边缘箱式图(利用基本图层)
-
拟合散点图(Scatterplot)
- 包的准备:ggplot2
- 数据准备
1)从网页导入数据
2)构建或提取数据框 - 图层绘制
1)提前设置主题参数
2)基本图层——画布,坐标轴数据
3)绘图类型——绘图的基本属性(点,线的大小,颜色,对应位置计数等)[points, smoothing line, encircle]
4)标签
-
聚类图(clusters)
- 包的准备:ggplot2,ggalt,ggfortify
- 数据准备
1)计算数据的主要组件
2) - 图层绘制
1)提前设置主题参数
2)基本图层——画布,坐标轴数据
3)绘图类型——绘图的基本属性(点,线的大小,颜色,对应位置计数等)[points, smoothing line, encircle]
4)标签
-
-
ggplot2中的问题记录
- ggplot(#data.rame, aes(#aesthetic mapping x,y,…))#ggplot2绘图的基本图层函数
- geom_jitter()#为解决点之间坐标太过相近而发生重叠,为每个点设置一些随机值,从而使得重叠的点可以分开
- ggplot2包的逻辑讲解link
(1)
> a <- ggplot(data = cjb,mapping = aes(sx)) +
+ geom_histogram(
+ aes(y= ..density..),
+ breaks = sx_hist_results$breaks,
+ color = "darkgray",
+ fill = "white") +
+ geom_density(color = "blue")
(2)
> ggplot(data = cjb,mapping = aes(sx)) +
+ geom_histogram(
+ breaks = sx_hist_results,
+ color = "darkgray",
+ fill = "white") +
+ geom_density(color = "blue")
Warning message:
Computation failed in `stat_bin()`:
没有为'list'类型实现默认的方法
(3)
> ggplot(data = cjb,mapping = aes(sx)) +
+ geom_histogram(
+ stat_bin(),
+ breaks = sx_hist_results,
+ color = "darkgray",
+ fill = "white") +
+ geom_density(color = "blue")
错误: `mapping` must be created by `aes()`
Run `rlang::last_error()` to see where the error occurred.
(4)
> ggplot(data = cjb,mapping = aes(sx)) +
+ geom_histogram(
+ aes(y = "identity"),
+ breaks = sx_hist_results,
+ color = "darkgray",
+ fill = "white") +
+ geom_density(color = "blue")
错误: stat_bin() can only have an x or y aesthetic.
Run `rlang::last_error()` to see where the error occurred.
8. Loess (locally weighted regression) 局部加权回归
https://blog.csdn.net/jesseyule/article/details/95245350
9.options(scipen= )默认函数
options(scipen=___)
- R中数据比较大时默认显示科学计数法,如果想让数据显示出来,可以设置scipen=XXX,只要用科学计数法小于这个数,数据就会直接显示出来,而不会用科学计数法。如scipen=30,即小于10^30即可。
10.计算机基础—字符编码
11.字符乱码原因分析与解决方案
- R语言默认UTF-8及国标码,这两种设置下一般不会出错。
- 主张在R的全局设置中选择UTF-8
- 如果出现乱码,可以考虑在载入包或文件前后写入encoding()【可能吧,这个我还没试过,等我哪天乱码了试一下】
12.ls(),list.files()
ls() | 列出当前工作环境所有的变量 |
---|---|
list.files() | listing all the files in the current directory. |
13.file, folder, directory
file | 就是一个个的文件,如*.doc,*.txt |
---|---|
folder | 适用于图形交互界面,就是常说的文件夹 |
directory | 存储路径,是一个概念大于folder的目录 |
14.file.path()
15.principal component analysis(PCA)
https://builtin.com/data-science/step-step-explanation-principal-component-analysis #还没看完,等下次再看,目前没有遇到相关的问题,没有想法。
16.NA 与logical expression ;my_data == NA & my_data==1
>my_data
> [1] 0.47529602 NA 1.75176684 -0.73928781 NA
[6] -1.10892882 NA NA 1.62189369 -0.66062950
[11] -0.56386020 NA 0.21042101 NA -1.09295277
[16] NA NA NA -1.63600689 0.83682893
[21] 1.92534915 NA -0.95832412 -0.56147388 -0.80805186
[26] -0.66247867 -2.58704299 NA NA NA
[31] -0.43209998 NA 1.76076988 0.22261591 -1.24890276
[36] NA -0.35849186 NA NA NA
[41] NA NA NA NA NA
[46] 0.99747500 NA 0.51566166 NA NA
[51] -1.08976718 NA -1.29187785 -1.66754613 NA
[56] 0.17181753 -0.66107353 NA NA 0.24843724
[61] NA NA 0.67953458 NA NA
[66] NA NA -0.72286368 0.64094992 NA
[71] -0.48342472 NA NA NA NA
[76] NA NA 0.43299440 NA NA
[81] 0.35350060 NA NA 0.03414461 1.37577093
[86] -1.31538297 -1.12841162 NA 0.85561496 0.52596441
[91] 0.68831783 NA NA -1.29869922 NA
[96] NA -1.13974742 1.08606470 0.23817419 NA
> my_data==1
[1] FALSE NA FALSE FALSE NA FALSE NA NA FALSE FALSE FALSE
[12] NA FALSE NA FALSE NA NA NA FALSE FALSE FALSE NA
[23] FALSE FALSE FALSE FALSE FALSE NA NA NA FALSE NA FALSE
[34] FALSE FALSE NA FALSE NA NA NA NA NA NA NA
[45] NA FALSE NA FALSE NA NA FALSE NA FALSE FALSE NA
[56] FALSE FALSE NA NA FALSE NA NA FALSE NA NA NA
[67] NA FALSE FALSE NA FALSE NA NA NA NA NA NA
[78] FALSE NA NA FALSE NA NA FALSE FALSE FALSE FALSE NA
[89] FALSE FALSE FALSE NA NA FALSE NA NA FALSE FALSE FALSE
> my_data==NA
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[24] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[47] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[70] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[93] NA NA NA NA NA NA NA NA
- NA 只是一个占位符,没有明确的赋值,> my_data==NA这个表达式是不完整的,所以返回了一个与my_data长度相同的,全是NA的向量。
- 同样,> my_data==1可以看到,只有有赋值的位置,才出现逻辑运算结果,NA的位置返回依旧是NA,因为这个位置上没有赋值。
17.函数学习
- names()
- identical(x,y)
18.向量中不同元素转换的优先级
如果向量中有不同类型的元素,自动转换优先级:字符串>复数型>浮点型>整数型>逻辑型【省略成:字符串>数字型>逻辑型(numeric:double,integer)】
cf:integer和double的区别
link
- double:大的浮点数
- float:小的浮点数
- integer:整数
🧨一定要注意在同一向量中的元素类型,如果元素类型不同,R会暗自默认转换成优先级元素类型(如numeric转换成character string),会影响后续的计算和作图。
tips:可以养成在构建一个新的数据结构时,前后查看数据结构或者数据类型(str(),class(),mode(),typeof()…)
19."1L"和"1"的区别
用'L'后缀来限定任何数字,目的是使其成为一个明确的整数
Example:
> u0 <- 1:3
> u0
[1] 1 2 3
> typeof(u0)
[1] "integer"
> u <- c(1,3)
> u
[1] 1 3
> typeof(u)
[1] "double"
> u2 <- c(1L,2L)
> typeof(u2)
[1] "integer"
20.R中含%符号含义
20.1数值运算符
符号 | 含义 |
---|---|
% | 百分数 |
%% | 除法求余数 |
%/% | 除法求商 |
%*% | 求内积 |
%o% | 求外积 |
内积:
外积:
https://zhuanlan.zhihu.com/p/348308540
20.2管道函数(pipe function)(Package—“magrittr”)
示例数据:
> (x1 <- x2 <- x3 <- rnorm(10))
[1] -0.7026747 1.3378089 -0.7428521 -0.9233402 1.7156075 1.0858700 -0.9757973 0.3029846
[9] -0.4465747 -0.7641285
符号 | 含义及示例 |
---|---|
%>% | 向右操作符:将左边的结果传递给右边,并用右边的函数进行计算,最终输出经过右边函数计算后的结果 |
示例:
> x1%>%abs%>%sort%>%print()
[1] 0.1182864 0.4056432 0.5300288 0.7363970 0.8660086 1.1582936 1.1919201 1.2540121
[9] 1.2706537 1.3411898
# 将x1的值传递给右边的abs函数,abs函数使x1取绝对值,并将x1绝对值传递给sort函数,sort函数对数据进行排序,并将结果输出给print()函数,将结果打印出来。
%<>% | 和%>%类似,但%<>%会把最后的结果返回给最左边的值,而%>%不会,最左边的值依旧为原来的值 |
---|
示例:
> x2%<>%abs%<>%sort%<>%print
[1] 0.1182864 0.4056432 0.5300288 0.7363970 0.8660086 1.1582936 1.1919201 1.2540121
[9] 1.2706537 1.3411898
> x2
[1] 0.1182864 0.4056432 0.5300288 0.7363970 0.8660086 1.1582936 1.1919201 1.2540121
[9] 1.2706537 1.3411898
#此处x2输出值为函数运算过的值,即%<>%最后的结果返回给了最左边的变量
> x1
[1] 1.2540121 0.4056432 0.7363970 -0.8660086 1.2706537 1.1919201 1.1582936 -1.3411898
[9] -0.5300288 0.1182864
#x1的值没有发生改变,即%<%没有把最后的返回给最左边的变量
%T>% | 向左操作符:将左边的结果传递给右边的函数进行运算,但并不会返回运算之后的结果,还是返回的上一级的结果 |
---|
示例:
> x3%T>%abs%>%sort%>%print
[1] -1.3411898 -0.8660086 -0.5300288 0.1182864 0.4056432 0.7363970 1.1582936 1.1919201
[9] 1.2540121 1.2706537
#这里的abs函数仿佛被忽视一样,因为%T>%是把左边的数据原封不动传递给了右边的函数;这样可以在运算中断时(如需要绘图时)继续将左边的数据输出给右边的函数进行运算。
PS:练手小插曲
> x3%T>%abs%>%sort%>%print
[1] -1.3411898 -0.8660086 -0.5300288 0.1182864 0.4056432 0.7363970 1.1582936 1.1919201
[9] 1.2540121 1.2706537
> x3%T>%abs%T>%sort%T>%print
[1] 1.2540121 0.4056432 0.7363970 -0.8660086 1.2706537 1.1919201 1.1582936 -1.3411898
[9] -0.5300288 0.1182864
[1] 1.2540121 0.4056432 0.7363970 -0.8660086 1.2706537 1.1919201 1.1582936 -1.3411898
[9] -0.5300288 0.1182864
#这里会把x3输出两边,我认为是这样组成的:
1.最开始的x3传给abs之后得到的数据集没有往右传,而是最左边的x3直接传给了sort,同理,sort数据集传给print的x3没有返回值,而是sort的数据集传给了最右的函数,但在print右侧没有函数,则直接返回sort这里的x3
2.sort这里得到的是左边传来的x3数据集,但abs和sort中间的%T>%没有把这里sort得到的x3数据集传给右边的print,而是abs得到的x3数据集传到了print这里,输出print(x3)
4.
%$% | 解释操作符:把左侧数据的数据集和属性名传给右侧,让右侧的调用函数直接通过左侧数据集的列名,就可以操作左侧的数据 |
---|
#设置一个数据框,并从中索引处需要的子集
# **1.普通操作**
>set.seed(123)
>df<-data.frame(x=1:10,y=rnorm(10),z=letters[1:10])
> df
x y z
1 1 0.6607697 a
2 2 -2.0529830 b
3 3 -1.4992061 c
4 4 1.4712331 d
5 5 1.4591385 e
6 6 0.1401390 f
7 7 0.2091844 g
8 8 -3.0360898 h
9 9 -0.4869341 i
10 10 -1.0878673 j
>df[df$x>5,]
x y z
6 6 0.1401390 f
7 7 0.2091844 g
8 8 -3.0360898 h
9 9 -0.4869341 i
10 10 -1.0878673 j
# **2.管道函数操作**
#用%$% 解释操作符,可以直接把左边数据集内容及属性名传递给右侧,右边的函数直接将左侧的数据集属性名作为内部变量来调用属性名进行操作
> set.seed(123)
> data.frame(x=1:10,y=rnorm(10),z=letters[1:10])%$%.[x>5,]
x y z
6 6 1.7150650 f
7 7 0.4609162 g
8 8 -1.2650612 h
9 9 -0.6868529 i
10 10 -0.4456620 j
#其中"."代表左侧完整的数据对象
# 3.脑洞求知
1) >df[df$x>5,]这里如果用>df[x>5,]会怎么样?
> mydf <- data.frame(h=1:10,j=rnorm(10),k=letters[1:10])
> mydf
h j k
1 1 -0.30684546 a
2 2 2.43639437 b
3 3 1.67289651 c
4 4 1.36737534 d
5 5 -0.02161347 e
6 6 -0.76405537 f
7 7 1.25204280 g
8 8 1.48487312 h
9 9 -0.60690977 i
10 10 -0.61753073 j
> mydf[mydf$h>5,]
h j k
6 6 -0.7640554 f
7 7 1.2520428 g
8 8 1.4848731 h
9 9 -0.6069098 i
10 10 -0.6175307 j
> mydf[h>5,]
Error in `[.data.frame`(mydf, h > 5, ) : 找不到对象'h'
#问题分析:这里的错误是因为mydf数据框没有添加到R的搜索路径中,所以找不到mydf数据框中的列变量
#解决方案:
> attach(mydf)
> mydf[h>5,]
h j k
6 6 -0.7640554 f
7 7 1.2520428 g
8 8 1.4848731 h
9 9 -0.6069098 i
10 10 -0.6175307 j
2) 如果用%>%进行传递,只是把数据集传给右侧会怎么样?
> data.frame(h=1:10,j=rnorm(10),k=letters[1:10])%>%.[h>5,]
Error in `[.data.frame`(., h > 5, ) : 找不到对象'h'
#问题分析:这里的错误同样是因为mydf数据框没有添加到R的搜索路径中,所以找不到mydf数据框中的列变量
#解决方案:
> attach(mydf)
> data.frame(h=1:10,j=rnorm(10),k=letters[1:10])%>%.[h>5,]
h j k
6 6 -0.372732960 f
7 7 -0.805415042 g
8 8 -0.007754222 h
9 9 0.086854230 i
10 10 -0.846072225 j
3)与% $ %管道函数比较 总结****
因为数据框没有被添加进R的搜索路径中,所以df[h>5,]索引找不到对象h,但是用%$%是直接将左侧数据集内的列变量变成了右侧函数的内部变量,可以直接搜索h。
4) tips:
- % $ %很像attach() 或者ggplot()作图时的使用
- 管道函数传递后不会重置最左侧的数据集在全局环境中的内容
20.3逻辑运算
%in% | 匹配,即左边的元素在右边的向量中是否存在 |
---|
> c("A","C","F") %in% c("B","C","A","R","Q","F")
[1] TRUE TRUE TRUE
> c("B","C","A","R","Q","F") %in% c("A","C","F")
[1] FALSE TRUE TRUE FALSE FALSE TRUE
带%的函数远不止于此,且带%函数是可以自己创建的 。
reference:link
21.函数expression
- 在整个赋值式子外面加一个小括号?
> (x1 <- x2 <- x3 <- rnorm(10))
#这里加括号是啥意思?
[1] -0.7026747 1.3378089 -0.7428521 -0.9233402 1.7156075 1.0858700 -0.9757973 0.3029846
[9] -0.4465747 -0.7641285
22.R中的概率函数
Each probability distribution in R has an
- r*** function (for “random”)
- d*** function (for “density”)
- p*** (for “probability”)
- q*** (for “quantile”)
standard probability distributions
- exponential (rexp())
- chi-squared (rchisq())
- gamma(rgamma())
23.table() 值得仔细研究
- 统计每个元素出现的频次
> table(df$grammer)
C GO Java NA PHP Python SQL
1 1 1 1 1 2 1
24.R语言中双冒号的作用是?
- 在加载包时,可以不用library()
- 在调用多个包中含有同样命名的函数时,进行区分
25.R 属性概念?
- attributes()——罗列属性
1. n a m e s 2. names 2. names2.class
3.$row.names - attr()——设置属性
- 属性名:
1.names
2.dim
3.class
26.vector的扩展
link
1.扩展类型
1. list——(可扩展成)数据框和 tibble
2. integer——因子型向量
3. 数值型向量——date, date-time向量
2.扩展方式
1. 改变属性
27.行合并&列合并
- rbind() #列数和列名要一致
- cbind() #行数要一致
28.算数函数汇总
29.apply函数族
怀念我没能保存下来的那两千多字,我可是好好研究了一番,加上自己的思考和分类敲上去的。呜呜呜~
link
30.read.csv()&read_csv()
- read.csv()——“utils”
- read_csv()——“readr”
read_csv函数与read.csv函数相比的优势是:
1.速度较快(约快 10 倍)
2.它们可以生成 tibble,并且不会将字符向量转换为因子,不使用行名称,也不会随意改动列名称。
3.更易于重复使用
4.二者的col_type()赋值不同
- read.csv()——colClasses
- read_csv()——col_type
作者:Richard_Zhou
链接:https://www.jianshu.com/p/e6982d667763
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
31.tibble
- col_types()
- ——double
- ——character
32.grep()与正则表达式的运用
grep()
#返回的是提取值对应的位置下标
grep1()
#返回逻辑值
# TRUE FALSE...
正则表达式,特殊表达及规则表达式统计
33. summarise()
34.向量知识点及函数汇总
35.排序函数
- sort()
#从小到大排列,返回排序后的向量 - order()
#从小到大排列,返回排序后原来向量元素的位置 - arrange()
#1)对象的数据类型为data.frame
2)以某一列数据排列顺序对数据框各列进行排序
36.当if语句进行多个条件判断
用逻辑操作符
and—— &
or—— |
> sum_two <- function(num1,num2){
+ if(is.numeric(num1) & is.numeric(num2)){
+ sum <- num1+num2
+ return(sum)
+ }else{
+ "Your input is not numeric."
+ }
+ }
37. read_csv 读入“csv”文件类型 & group_by() 进行分组
> library(readr)
> df <- read_csv("D:/R/R-4.0.5/R_Files/21-50.csv")
> df
# A tibble: 135 x 3
createTime education salary
<chr> <chr> <chr>
1 2020/3/16 11:30 本科 20k-35k
2 2020/3/16 10:58 本科 20k-40k
3 2020/3/16 10:46 不限 20k-35k
4 2020/3/16 10:45 本科 13k-20k
5 2020/3/16 10:20 本科 10k-20k
6 2020/3/16 10:33 本科 10k-18k
7 2020/3/16 10:11 硕士 16k-30k
8 2020/3/16 9:49 本科 10k-15k
9 2020/3/16 9:25 不限 6k-8k
10 2020/3/16 9:35 本科 12k-20k
> df1 <-separate(df,col=salary,into=c('low','high'),sep='-')
> df2 <-mutate(df1,salary=(parse_number(low)+parse_number(high))*1000/2) %>% select(-c(low,high))
> df2 %>% group_by(education) %>% summarise(avg_education = mean(salary))
# A tibble: 4 x 2
education avg_education
<chr> <dbl>
1 本科 19361.
2 不限 19600
3 大专 10000
4 硕士 20643.
38. all() & any()
函数 | 意义 |
---|---|
all() | 函数内有一个逻辑值为False,则返回False |
any() | 函数中只要有一个逻辑值为True,则返回True |
> q <- c(2,5,3,6)
> q > 5
[1] FALSE FALSE FALSE TRUE
> all(q>5)
[1] FALSE
> any(q>5)
[1] TRUE
39.R 中茎叶图绘制stem()
stem(x, scale = 1, width = 80, atom = 1e-08)
scale:代表叶的取值范围
1:0~9
0.5:0 ~ 4,5 ~ 9
stem解释
40.R中正则表达式的使用
- 字符串模糊查找和提取—grep
a <- grep(pattern = "^CP",x=PNH.CP$LibraryID,value = TRUE)
> length(a)
[1] 1113
41.去除向量中的重复并提取为不含重复的新向量
a <- a[!duplicated(a)]
> a
[1] "CP1" "CP2" "CP3" "CP4" "CP5" "CP6" "CP7" "CP8" "CP9" "CP10" "CP11" "CP12" "CP13"
42.几个取整函数
函数 | 作用 |
---|---|
round() | 四舍五入取整 |
ceiling() | 向上取整 |
floor() | 向下取整 |