R Markdown

利用nycflights13包的flights数据集是2013年从纽约三大机场(JFK、LGA、EWR)起飞的所有航班的准点数据,共336776条记录。

  1. 代码含义:这段代码对鸢尾花数据集(iris)做了排序处理:

    首先将数据转为tibble格式(一种更现代的数据框)

    然后按两个层次排序:

    第一优先级:按花的种类(Species)升序排列(setosa → versicolor → virginica)

    第二优先级:在每个种类组内,将所有”Sepal”开头的列(花萼长度和宽度)按数值从大到小降序排列

    最终结果是分组排序后的数据,同种花按花萼尺寸从大到小排列。

    tibble(iris) %>% 
      arrange(Species,across(starts_with("Sepal"), desc))
    ## # A tibble: 150 × 5
    ##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    ##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
    ##  1          5.8         4            1.2         0.2 setosa 
    ##  2          5.7         4.4          1.5         0.4 setosa 
    ##  3          5.7         3.8          1.7         0.3 setosa 
    ##  4          5.5         4.2          1.4         0.2 setosa 
    ##  5          5.5         3.5          1.3         0.2 setosa 
    ##  6          5.4         3.9          1.7         0.4 setosa 
    ##  7          5.4         3.9          1.3         0.4 setosa 
    ##  8          5.4         3.7          1.5         0.2 setosa 
    ##  9          5.4         3.4          1.7         0.2 setosa 
    ## 10          5.4         3.4          1.5         0.4 setosa 
    ## # ℹ 140 more rows
    1. 代码含义:这段代码对《星球大战》角色数据集(starwars)进行了分组筛选操作:

    分组:先按角色性别(gender)分组

    筛选:在每个性别组内,筛选出体重大于该组平均体重的角色

    使用na.rm = TRUE忽略缺失值计算平均体重

    结果:最终得到的是各个性别组中,体重超过该组平均值的角色列表

    例如:会分别计算男性、女性角色的平均体重,然后筛选出超过各自性别平均体重的角色。

    starwars %>% 
      group_by(gender) %>% 
      filter(mass > mean(mass, na.rm = TRUE))
    ## # A tibble: 15 × 14
    ## # Groups:   gender [3]
    ##    name    height   mass hair_color skin_color eye_color birth_year sex   gender
    ##    <chr>    <int>  <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
    ##  1 Darth …    202  136   none       white      yellow          41.9 male  mascu…
    ##  2 Owen L…    178  120   brown, gr… light      blue            52   male  mascu…
    ##  3 Beru W…    165   75   brown      light      blue            47   fema… femin…
    ##  4 Chewba…    228  112   brown      unknown    blue           200   male  mascu…
    ##  5 Jabba …    175 1358   <NA>       green-tan… orange         600   herm… mascu…
    ##  6 Jek To…    180  110   brown      fair       blue            NA   <NA>  <NA>  
    ##  7 IG-88      200  140   none       metal      red             15   none  mascu…
    ##  8 Bossk      190  113   none       green      red             53   male  mascu…
    ##  9 Ayla S…    178   55   none       blue       hazel           48   fema… femin…
    ## 10 Gregar…    185   85   black      dark       brown           NA   <NA>  <NA>  
    ## 11 Lumina…    170   56.2 black      yellow     blue            58   fema… femin…
    ## 12 Zam We…    168   55   blonde     fair, gre… yellow          NA   fema… femin…
    ## 13 Shaak …    178   57   none       red, blue… black           NA   fema… femin…
    ## 14 Grievo…    216  159   none       brown, wh… green, y…       NA   male  mascu…
    ## 15 Tarfful    234  136   brown      brown      blue            NA   male  mascu…
    ## # ℹ 5 more variables: homeworld <chr>, species <chr>, films <list>,
    ## #   vehicles <list>, starships <list>
    1. 代码含义:这段代码对《星球大战》角色数据集(starwars)进行了以下简洁操作:

    列筛选:仅保留三个关键字段

    name(角色名)

    homeworld(母星)

    species(物种)

    类型转换:将除name外的列转为因子型(factor)

    使用across(!name, as.factor)精准选择所有非名字列

    转换后更适合统计分析和可视化

    最终输出一个精简的tibble,包含角色名(字符型)及其分类信息(因子型)。这种处理常用于准备分类分析前的数据标准化。

    starwars %>%
      select(name, homeworld, species) %>%
      mutate(across(!name, as.factor))
    ## # A tibble: 87 × 3
    ##    name               homeworld species
    ##    <chr>              <fct>     <fct>  
    ##  1 Luke Skywalker     Tatooine  Human  
    ##  2 C-3PO              Tatooine  Droid  
    ##  3 R2-D2              Naboo     Droid  
    ##  4 Darth Vader        Tatooine  Human  
    ##  5 Leia Organa        Alderaan  Human  
    ##  6 Owen Lars          Tatooine  Human  
    ##  7 Beru Whitesun Lars Tatooine  Human  
    ##  8 R5-D4              Tatooine  Droid  
    ##  9 Biggs Darklighter  Tatooine  Human  
    ## 10 Obi-Wan Kenobi     Stewjon   Human  
    ## # ℹ 77 more rows
    1. 代码含义:这段 R 代码使用 dplyr 包对 mtcars 数据集进行了以下处理:

    数据转换:将 mtcars 数据集转换为 tibble 格式(更现代的 data frame)

    首次分组:按 vs 变量分组(发动机类型:0 = V型,1 = 直列型)

    创建新变量:

    将马力(hp)变量分成 3 个等宽区间(使用 cut() 函数)

    新变量命名为 hp_cut(包含马力区间分组)

    重新分组:最后按新创建的 hp_cut 变量重新分组数据

    tibble(mtcars) %>%
      group_by(vs) %>%
      mutate(hp_cut = cut(hp, 3)) %>%
      group_by(hp_cut)
    ## # A tibble: 32 × 12
    ## # Groups:   hp_cut [6]
    ##      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb hp_cut     
    ##    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct>      
    ##  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4 (90.8,172] 
    ##  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4 (90.8,172] 
    ##  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1 (75.7,99.3]
    ##  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1 (99.3,123] 
    ##  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2 (172,254]  
    ##  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1 (99.3,123] 
    ##  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4 (172,254]  
    ##  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2 (51.9,75.7]
    ##  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2 (75.7,99.3]
    ## 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4 (99.3,123] 
    ## # ℹ 22 more rows

    第三题 查找帮助理解函数

阅读 https://dplyr.tidyverse.org/reference/mutate-joins.html 内容,说明4个数据集链接函数函数的作用。分别举一个实际例子演示并解释其输出结果。

  1. inner_join(``内连接

    作用:仅保留两表中键值匹配的行(交集)示例:找出同时存在于两个表中的学生成绩``)

    # 学生信息表
    students <- tibble(id = 1:3, name = c("Alice", "Bob", "Charlie"))
    # 成绩表
    grades <- tibble(id = c(2,3,4), score = c(90, 85, 88))
    
    inner_join(students, grades, by = "id")
    ## # A tibble: 2 × 3
    ##      id name    score
    ##   <dbl> <chr>   <dbl>
    ## 1     2 Bob        90
    ## 2     3 Charlie    85
    1. left_join(``左连接

    作用:保留左表所有行,右表无匹配时填充NA示例:列出所有学生信息(含成绩,无成绩者标记NA)``)

    left_join(students, grades, by = "id")
    ## # A tibble: 3 × 3
    ##      id name    score
    ##   <dbl> <chr>   <dbl>
    ## 1     1 Alice      NA
    ## 2     2 Bob        90
    ## 3     3 Charlie    85
    1. right_join(``右连接

    作用:保留右表所有行,左表无匹配时填充NA示例:列出所有成绩记录(含学生姓名,无姓名者标记NA)``)

    right_join(students, grades, by = "id")
    ## # A tibble: 3 × 3
    ##      id name    score
    ##   <dbl> <chr>   <dbl>
    ## 1     2 Bob        90
    ## 2     3 Charlie    85
    ## 3     4 <NA>       88
    1. full_join(``全连接

    作用:保留两表所有行,无匹配处填充NA示例:合并所有学生和成绩记录``)

    full_join(students, grades, by = "id")
    ## # A tibble: 4 × 3
    ##      id name    score
    ##   <dbl> <chr>   <dbl>
    ## 1     1 Alice      NA
    ## 2     2 Bob        90
    ## 3     3 Charlie    85
    ## 4     4 <NA>       88