R 知识点记录

本文详细介绍了R语言中数据框的索引方式、递归函数的使用、ggplot2绘图逻辑,以及局部加权回归等核心概念。深入探讨了向量数据类型转换、字符编码、函数表达式以及概率函数的应用。同时,文章还涵盖了R中的字符乱码解决方案、读取CSV文件、数据框合并与排序等多个实用技巧,旨在提升R语言编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

遇到的新概念,新名词,归纳总结
提示:以下是本篇文章正文内容,下面案例可供参考

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$v1vector
drop()修改返回值的数据结构
  1. 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
  1. mydata[2,]返回值是数据框

    因为每一行会包含不同的数据类型
    
> mydata[2,]
  x2 sumx meanx x3 NULL. x4 x5
2  5    6     3  2     2  9  9
  1. 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
  1. 列表中下标索引

    x$y 是 x[["y"]]的简写  #返回的都是元素
    

3.递归函数

  1. 定义

    如果一个函数在内部调用自身本身,这个函数就是递归函数。
    
  2. 示例

    举个例子,我们来计算阶乘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时需要特殊处理。
    
  3. 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

代码意义
\rcarriage return (回车—回到此行最左列)
\nline feed(换行—下移一行)
\r\nenter(回车+换行)
\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
>***

# 在每句话的最后应该还有一个值覆盖
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210623162646785.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzgzMDg5Mg==,size_16,color_FFFFFF,t_70#pic_center)

"\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.向量中的数据类型

  1. vector()中只能包含有一种数据类型
  2. vector()中赋值时如果有两种数据类型,则会转换成一种
> i <- c(T,1)
> i
[1] 1 1
> i1 <- c(1,T)
> i1
[1] 1 1
#逻辑型均转换成数值型

7.ggplot2初探

  1. 绘图逻辑——图层叠加

  2. 数据准备——dataframe 结构

  3. 需要加载的包
    1.tidyverse
    2.ggplot2
    3.cowplot
    4.dplyr

  4. 图层

    1. ggplot() 图层:数据和映射

    2. geom_XXX()图层:绘图类型和基本属性

    3. scale_XXX()图层:标度图层(标准和尺度)

    4. facet_grid()图层:图层分面,数据分子集绘图

    5. 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]
      
    6. labs()图层:添加标签。x,y轴标题和总的title

    5.ggplot2绘图函数模板

ggplot(data = , aes(x = , y = )) + 
    geom_XXX(...) + ... + stat_XXX(...) + ... +
    annotate(...) + ... +
    scale_XXX(...) + coord_XXX(...) + guides(...) + theme(...)
  1. 绘图实例

    1. 边界散点图(Scatterplot with Encirling)
      1. 包的准备:ggplot2,ggalt
      2. 数据准备
      1)参数默认
      2)构建或提取数据框
      3. 图层绘制
      1)基本图层——画布,坐标轴数据
      ggplot(data= ,aes(x= ,y= ))
      2)绘图类型——绘图的基本属性(点,线的大小,颜色等)[points, smoothing line, encircle]
      3) 标签

    2. 边缘箱图/直方图(Marginal Histogram / Boxplot)

      1. 包的准备:ggplot2,ggExtra
      2. 数据准备
        1)从包中搜索下载数据集{data()}
        2)构建或提取数据框
      3. 图层绘制
        1)提前设置主题参数
        2)基本图层——画布,坐标轴数据
        3)绘图类型——绘图的基本属性(点,线的大小,颜色,对应位置计数等)[points, smoothing line, encircle]
        4)绘制边缘直方图(利用基本图层)
        5)绘制边缘箱式图(利用基本图层)
    3. 拟合散点图(Scatterplot)

      1. 包的准备:ggplot2
      2. 数据准备
        1)从网页导入数据
        2)构建或提取数据框
      3. 图层绘制
        1)提前设置主题参数
        2)基本图层——画布,坐标轴数据
        3)绘图类型——绘图的基本属性(点,线的大小,颜色,对应位置计数等)[points, smoothing line, encircle]
        4)标签
    4. 聚类图(clusters)

      1. 包的准备:ggplot2,ggalt,ggfortify
      2. 数据准备
        1)计算数据的主要组件
        2)
      3. 图层绘制
        1)提前设置主题参数
        2)基本图层——画布,坐标轴数据
        3)绘图类型——绘图的基本属性(点,线的大小,颜色,对应位置计数等)[points, smoothing line, encircle]
        4)标签
  2. ggplot2中的问题记录

    1. ggplot(#data.rame, aes(#aesthetic mapping x,y,…))#ggplot2绘图的基本图层函数
    2. geom_jitter()#为解决点之间坐标太过相近而发生重叠,为每个点设置一些随机值,从而使得重叠的点可以分开
    3. 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.计算机基础—字符编码

  • ASCII

  • Unicode

  • UTF-8

  • reference

11.字符乱码原因分析与解决方案

link

  • 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   
  1. NA 只是一个占位符,没有明确的赋值,> my_data==NA这个表达式是不完整的,所以返回了一个与my_data长度相同的,全是NA的向量。
  2. 同样,> my_data==1可以看到,只有有赋值的位置,才出现逻辑运算结果,NA的位置返回依旧是NA,因为这个位置上没有赋值。

17.函数学习

  1. names()
  2. 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”)

link

示例数据:

> (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)

%T>%
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:

  1. % $ %很像attach() 或者ggplot()作图时的使用
  2. 管道函数传递后不会重置最左侧的数据集在全局环境中的内容

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

  1. 在整个赋值式子外面加一个小括号?
> (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() 值得仔细研究

  1. 统计每个元素出现的频次
> table(df$grammer)
     C     GO   Java     NA    PHP Python    SQL 
     1      1      1      1      1      2      1 

24.R语言中双冒号的作用是?

  1. 在加载包时,可以不用library()
  2. 在调用多个包中含有同样命名的函数时,进行区分

25.R 属性概念?

  1. attributes()——罗列属性
    1. n a m e s 2. names 2. names2.class
    3.$row.names
  2. attr()——设置属性
  3. 属性名:
    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

  1. col_types()
    1. ——double
    2. ——character

32.grep()与正则表达式的运用

grep函数详解

grep()
#返回的是提取值对应的位置下标
grep1()
#返回逻辑值
# TRUE FALSE...

正则表达式,特殊表达及规则表达式统计

33. summarise()

34.向量知识点及函数汇总

link

35.排序函数

  1. sort()
    #从小到大排列,返回排序后的向量
  2. order()
    #从小到大排列,返回排序后原来向量元素的位置
  3. 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中正则表达式的使用

  1. 字符串模糊查找和提取—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()向下取整

43.R——对表格进行连接,并匹配2个对应的值

将不同表格整合在一起或者利用对照表进行值的匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值