[
  {
    "objectID": "about.html",
    "href": "about.html",
    "title": "区域水环境污染数据分析实践",
    "section": "",
    "text": "About this site."
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#目录",
    "href": "SD/5.2_空间分析/index.html#目录",
    "title": "空间分析",
    "section": "目录",
    "text": "目录\n\n空间数据基础概念\n\nSimple Features (SF) 核心规范\n\nSFEXT扩展功能实战\n\n空间关系与几何操作\n\n空间统计分析方法\n\n综合实战案例"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#空间数据基础概念",
    "href": "SD/5.2_空间分析/index.html#空间数据基础概念",
    "title": "空间分析",
    "section": "1. 空间数据基础概念",
    "text": "1. 空间数据基础概念\n空间数据类型体系\nlibrary(sf)\n# 创建示例几何类型\nst_point(c(0, 0)) # 点\nst_linestring(rbind(c(0, 0), c(1, 1))) # 线\nst_polygon(list(rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 0)))) # 面\n坐标参考系(CRS)\n# 常用坐标系定义\nwgs84 &lt;- st_crs(4326) # 经纬度坐标\nutm50n &lt;- st_crs(32650) # UTM 50N投影\ncat(st_crs(wgs84)$proj4string)"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#simple-features-sf-核心规范",
    "href": "SD/5.2_空间分析/index.html#simple-features-sf-核心规范",
    "title": "空间分析",
    "section": "2. Simple Features (SF) 核心规范",
    "text": "2. Simple Features (SF) 核心规范\n创建SF对象\n# 从数据框转换\ndf &lt;- data.frame(\n  city = c(\"Beijing\", \"Shanghai\"),\n  pop = c(2171, 2424),\n  geometry = st_sfc(\n    st_point(c(116.4, 39.9)),\n    st_point(c(121.5, 31.2))\n  )\n)\nsf_df &lt;- st_as_sf(df, crs = 4326)\n数据IO操作\n# 写入/读取空间文件\nst_write(sf_df, \"cities.shp\")\nnew_sf &lt;- st_read(\"cities.shp\")\n\n# 从内置数据集加载\nnc &lt;- st_read(system.file(\"shape/nc.shp\", package = \"sf\"))"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#sfext扩展功能实战",
    "href": "SD/5.2_空间分析/index.html#sfext扩展功能实战",
    "title": "空间分析",
    "section": "3. SFEXT扩展功能实战",
    "text": "3. SFEXT扩展功能实战\n高级几何生成\nremotes::install_github(\"r-spatial/sfext\")\nlibrary(sfext)\n\n# 生成渔网网格\ngrid &lt;- st_regular_grid(\n  xmin = 0,\n  ymin = 0,\n  xmax = 100,\n  ymax = 100,\n  cell_size = 10\n)\nplot(grid)\n空间索引加速\n# 创建空间索引\nsystem.time(\n  without_idx &lt;- st_intersects(nc, nc)\n)\n\nsystem.time(\n  with_idx &lt;- st_intersects(st_make_valid(nc), sparse = TRUE)\n)"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#空间关系与操作",
    "href": "SD/5.2_空间分析/index.html#空间关系与操作",
    "title": "空间分析",
    "section": "4. 空间关系与操作",
    "text": "4. 空间关系与操作\n拓扑关系判断\np1 &lt;- st_point(c(0, 0))\np2 &lt;- st_point(c(1, 1))\nst_distance(p1, p2) # 距离计算\n\npoly &lt;- st_polygon(list(rbind(c(0, 0), c(1, 0), c(1, 1), c(0, 0))))\nst_contains(poly, p1) # 包含关系\n几何变换操作\n# 缓冲区分析\nbuf &lt;- st_buffer(nc[1, ], dist = 0.1)\nplot(buf)\nplot(nc[1, ]$geometry, add = TRUE, col = 'red')\n\n# 凸包计算\nconvex &lt;- st_convex_hull(nc)\nplot(convex)"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#空间统计分析方法",
    "href": "SD/5.2_空间分析/index.html#空间统计分析方法",
    "title": "空间分析",
    "section": "5. 空间统计分析方法",
    "text": "5. 空间统计分析方法\n点模式分析\nlibrary(spatstat)\n# 创建点模式对象\nppp &lt;- ppp(x = runif(100), y = runif(100), window = owin(c(0, 1), c(0, 1)))\n\n# K函数分析\nK &lt;- Kest(ppp)\nplot(K, main = \"Ripley's K函数\")\n空间自相关检验\nlibrary(spdep)\n# Moran's I检验\nnb &lt;- poly2nb(nc)\nlw &lt;- nb2listw(nb)\nmoran.test(nc$BIR74, lw)"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#综合实战案例",
    "href": "SD/5.2_空间分析/index.html#综合实战案例",
    "title": "空间分析",
    "section": "6. 综合实战案例",
    "text": "6. 综合实战案例\n城市公园服务区分析\nlibrary(osmdata)\nlibrary(sfnetworks)\n\n# 获取OSM数据\nparks &lt;- opq(\"New York\") %&gt;%\n  add_osm_feature(\"leisure\", \"park\") %&gt;%\n  osmdata_sf()\n\nroads &lt;- opq(\"New York\") %&gt;%\n  add_osm_feature(\"highway\") %&gt;%\n  osmdata_sf()\n\n# 构建网络分析\nnet &lt;- as_sfnetwork(roads$osm_lines) %&gt;%\n  st_transform(32618)\n\n# 计算服务范围（示例）\nservice_area &lt;- st_network_blend(net, parks$osm_polygons) %&gt;%\n  st_buffer(500) # 500米服务区"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#可视化增强技巧",
    "href": "SD/5.2_空间分析/index.html#可视化增强技巧",
    "title": "空间分析",
    "section": "可视化增强技巧",
    "text": "可视化增强技巧\n分层绘图\nlibrary(ggplot2)\nggplot() +\n  geom_sf(data = nc, aes(fill = BIR74)) +\n  geom_sf(data = service_area, alpha = 0.3) +\n  scale_fill_viridis_c() +\n  theme_minimal()\n交互可视化\nlibrary(mapview)\nmapview(nc, zcol = \"BIR74\", burst = TRUE) +\n  mapview(service_area, alpha.regions = 0.2)"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#中国地图",
    "href": "SD/5.2_空间分析/index.html#中国地图",
    "title": "空间分析",
    "section": "中国地图",
    "text": "中国地图\n\nCodeOutput\n\n\n\nlibrary(tidyverse)\nlibrary(sf)\n\n# 更稳定的预处理数据源（含港澳台）\n# china &lt;- st_read(\"https://geo.datav.aliyun.com/areas_v3/bound/100000.json\")\n\nchina &lt;- st_read(\"./中华人民共和国.json\", quiet = TRUE)\n\nlibrary(ggplot2)\n\nggplot(china) +\n  geom_sf(fill = \"#F6F6F6\", color = \"#666666\", size = 0.3) +\n  theme_void() +\n  labs(title = \"China\")\n\n# 添加模拟经济数据（实际应用可连接统计年鉴）\nset.seed(123)\nchina$gdp &lt;- runif(nrow(china), 100, 1000) # 模拟GDP数据（亿元）\n\nchina |&gt;\n  ggplot() +\n  geom_sf(aes(fill = gdp), color = \"gray90\", size = 0.2) +\n  scale_fill_gradientn(\n    colours = c(\"#2c7bb6\", \"#abd9e9\", \"#ffffbf\", \"#fdae61\", \"#d7191c\"),\n    name = NULL\n  ) +\n  theme_void() +\n  theme(legend.position = c(0.85, 0.3))"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#kriging",
    "href": "SD/5.2_空间分析/index.html#kriging",
    "title": "空间分析",
    "section": "Kriging",
    "text": "Kriging\n\nCodeOutput\n\n\n\nrequire(sf)\nrequire(sp)\nrequire(gstat)\nrequire(raster)\nrequire(ggplot2)\n# 读取太湖边界\nlake_boundary &lt;- st_read(\"../../data/taihu.shp\") |&gt;\n  sf::st_make_valid()\nmain_water &lt;- st_difference(\n  lake_boundary[lake_boundary$Name == \"boundary\", ],\n  st_union(lake_boundary[lake_boundary$Name != \"boundary\", ])\n)\n\nget_kriging &lt;- function(indf, Yvarname, grid = NULL, boundsf = main_water) {\n  insf &lt;- indf |&gt;\n    sfext::df_to_sf(crs = 4326, coords = c(\"long\", \"lat\")) |&gt;\n    dplyr::select(-c(\"long\", \"lat\")) |&gt;\n    dplyr::rename(Y = tidyselect::all_of(Yvarname))\n  if (is.null(grid)) {\n    # 1. 将sf边界转为terra格式\n    v &lt;- terra::vect(boundsf)\n    # 2. 创建基础网格\n    base_grid &lt;- terra::rast(v, resolution = 0.002) # 基础低分辨率\n    # 3. 创建高分辨率区域（例如边界附近）\n    buffer_zone &lt;- buffer(v, width = 0.005) # 边界附近创建缓冲区\n    hi_res_grid &lt;- terra::rast(buffer_zone, resolution = 0.001)\n    # 4. 合并网格\n    final_grid &lt;- merge(base_grid, hi_res_grid)\n    # 5. 转为点并裁剪\n    grid &lt;- terra::as.points(final_grid) |&gt;\n      sf::st_as_sf() |&gt;\n      sf::st_filter(main_water)\n  }\n  insp &lt;- sf::as_Spatial(insf)\n  fit &lt;- automap::autofitVariogram(Y ~ 1, insp)\n  # 克里金插值\n  m &lt;- gstat::gstat(\n    formula = Y ~ 1,\n    data = insp,\n    model = fit$var_model\n  )\n  predsf &lt;- predict(m, grid) |&gt;\n    sf::st_as_sf()\n  outsf &lt;- predsf |&gt;\n    st_coordinates() |&gt;\n    as.data.frame() |&gt;\n    cbind(pred = predsf$var1.pred)\n  return(outsf)\n}\n\n\nwqdf &lt;- readxl::read_xlsx(\"../../data/wqdata.xlsx\")\n\nif (FALSE) {\n  wqsf &lt;- wqdf |&gt;\n    nest(datedf = -date) |&gt;\n    dplyr::mutate(\n      krigingsf = purrr::map(datedf, \\(x) {\n        get_kriging(x, \"conc\", boundsf = main_water)\n      })\n    )\n  saveRDS(wqsf, \"./wqsf.rds\")\n}\nwqsf &lt;- readRDS(\"./wqsf.rds\")\n\nwqsf |&gt;\n  unnest(krigingsf) |&gt;\n  ggplot(aes(X, Y)) +\n  geom_contour_filled(aes(z = pred), bins = 20) +\n  geom_sf(\n    data = main_water,\n    aes(x = NULL, y = NULL),\n    fill = NA,\n    colour = \"black\",\n    linewidth = 1\n  ) +\n  # scale_fill_gradientn(colors = hcl.colors(100, \"RdYlBu\")) + # 设置颜色渐变\n  # ggsci::scale_fill_aaas() +\n  coord_sf() +\n  theme_void()"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#学习资源",
    "href": "SD/5.2_空间分析/index.html#学习资源",
    "title": "空间分析",
    "section": "学习资源",
    "text": "学习资源\n\nSF官方文档：https://r-spatial.github.io/sf/\n《Geocomputation with R》在线书\nR-spatial教程：https://github.com/r-spatial/workshops\n\n\n### 使用说明：\n1. 需要R 4.0+环境\n2. 推荐安装依赖：\n   ```r\n   install.packages(c(\"sf\", \"spatstat\", \"spdep\", \"osmdata\", \"sfnetworks\", \"ggplot2\", \"mapview\"))\n   remotes::install_github(\"r-spatial/sfext\")\n\n实际案例数据可替换为本地shapefile\n交互可视化部分需要浏览器支持"
  },
  {
    "objectID": "SD/5.2_空间分析/index.html#欢迎讨论",
    "href": "SD/5.2_空间分析/index.html#欢迎讨论",
    "title": "空间分析",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#数据说明",
    "href": "SD/4.2_实践部分/index.html#数据说明",
    "title": "数据前处理+ggplot2画图实践",
    "section": "数据说明",
    "text": "数据说明\n\nmpg\n\n# A tibble: 234 × 11\n   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class\n   &lt;chr&gt;        &lt;chr&gt;      &lt;dbl&gt; &lt;int&gt; &lt;int&gt; &lt;chr&gt; &lt;chr&gt; &lt;int&gt; &lt;int&gt; &lt;chr&gt; &lt;chr&gt;\n 1 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…\n 2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…\n 3 audi         a4           2    2008     4 manu… f        20    31 p     comp…\n 4 audi         a4           2    2008     4 auto… f        21    30 p     comp…\n 5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…\n 6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…\n 7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…\n 8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…\n 9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…\n10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…\n# ℹ 224 more rows"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#完成图1",
    "href": "SD/4.2_实践部分/index.html#完成图1",
    "title": "数据前处理+ggplot2画图实践",
    "section": "完成图1",
    "text": "完成图1"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#完成图2",
    "href": "SD/4.2_实践部分/index.html#完成图2",
    "title": "数据前处理+ggplot2画图实践",
    "section": "完成图2",
    "text": "完成图2"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#完成图3",
    "href": "SD/4.2_实践部分/index.html#完成图3",
    "title": "数据前处理+ggplot2画图实践",
    "section": "完成图3",
    "text": "完成图3"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#完成图4",
    "href": "SD/4.2_实践部分/index.html#完成图4",
    "title": "数据前处理+ggplot2画图实践",
    "section": "完成图4",
    "text": "完成图4"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#完成图5",
    "href": "SD/4.2_实践部分/index.html#完成图5",
    "title": "数据前处理+ggplot2画图实践",
    "section": "完成图5",
    "text": "完成图5"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#综合实践三维荧光数据处理",
    "href": "SD/4.2_实践部分/index.html#综合实践三维荧光数据处理",
    "title": "数据前处理+ggplot2画图实践",
    "section": "综合实践：三维荧光数据处理",
    "text": "综合实践：三维荧光数据处理"
  },
  {
    "objectID": "SD/4.2_实践部分/index.html#欢迎讨论",
    "href": "SD/4.2_实践部分/index.html#欢迎讨论",
    "title": "数据前处理+ggplot2画图实践",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/3.9_课后作业8/index.html#第8次课后作业",
    "href": "SD/3.9_课后作业8/index.html#第8次课后作业",
    "title": "课后作业8",
    "section": "第8次课后作业",
    "text": "第8次课后作业\n\n根据airqualitydf.xlsx，按采样点统计白天（8:00-20:00）与夜晚（20:00-8:00）中空气质量指数（AQI）中位数，按城市统计低于所有采样点AQI30%分位值的采样点占比，列出上述占比最高的10个城市（不考虑采样点数低于5个的城市）。\n按照不同城市分组，统计白天与夜晚AQI中位数是否具有显著差异。\n\n作业模板：第8次课后作业_模板.qmd"
  },
  {
    "objectID": "SD/3.9_课后作业8/index.html#示例代码",
    "href": "SD/3.9_课后作业8/index.html#示例代码",
    "title": "课后作业8",
    "section": "示例代码",
    "text": "示例代码\n基于R的示例结果\n\n第8次课后作业R示例代码结果\n\n基于SAS的示例结果\n\n第8次课后作业SAS示例代码\n第8次课后作业SAS示例结果1\n第8次课后作业SAS示例结果2\n第8次课后作业SAS示例结果3\n第8次课后作业SAS示例结果4"
  },
  {
    "objectID": "SD/3.9_课后作业8/index.html#欢迎讨论",
    "href": "SD/3.9_课后作业8/index.html#欢迎讨论",
    "title": "课后作业8",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#tidyverse风格数据分析总体流程",
    "href": "SD/2.3_datatransform/index.html#tidyverse风格数据分析总体流程",
    "title": "Data Transform",
    "section": "tidyverse风格数据分析总体流程",
    "text": "tidyverse风格数据分析总体流程"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#dplyr-cheatsheet",
    "href": "SD/2.3_datatransform/index.html#dplyr-cheatsheet",
    "title": "Data Transform",
    "section": "dplyr cheatsheet",
    "text": "dplyr cheatsheet"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#查看数据",
    "href": "SD/2.3_datatransform/index.html#查看数据",
    "title": "Data Transform",
    "section": "查看数据",
    "text": "查看数据\n\nflights\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列",
    "href": "SD/2.3_datatransform/index.html#选择列",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(year, month, day)"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-1",
    "href": "SD/2.3_datatransform/index.html#选择列-1",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(year:day)"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-2",
    "href": "SD/2.3_datatransform/index.html#选择列-2",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(3:5)\n\n# A tibble: 336,776 × 3\n     day dep_time sched_dep_time\n   &lt;int&gt;    &lt;int&gt;          &lt;int&gt;\n 1     1      517            515\n 2     1      533            529\n 3     1      542            540\n 4     1      544            545\n 5     1      554            600\n 6     1      554            558\n 7     1      555            600\n 8     1      557            600\n 9     1      557            600\n10     1      558            600\n# ℹ 336,766 more rows"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-3",
    "href": "SD/2.3_datatransform/index.html#选择列-3",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(!year:day)\n\n# A tibble: 336,776 × 16\n   dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier\n      &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt; &lt;chr&gt;  \n 1      517            515         2      830            819        11 UA     \n 2      533            529         4      850            830        20 UA     \n 3      542            540         2      923            850        33 AA     \n 4      544            545        -1     1004           1022       -18 B6     \n 5      554            600        -6      812            837       -25 DL     \n 6      554            558        -4      740            728        12 UA     \n 7      555            600        -5      913            854        19 B6     \n 8      557            600        -3      709            723       -14 EV     \n 9      557            600        -3      838            846        -8 B6     \n10      558            600        -2      753            745         8 AA     \n# ℹ 336,766 more rows\n# ℹ 9 more variables: flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;,\n#   air_time &lt;dbl&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-4",
    "href": "SD/2.3_datatransform/index.html#选择列-4",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(-(year:day))\n\n# A tibble: 336,776 × 16\n   dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier\n      &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt; &lt;chr&gt;  \n 1      517            515         2      830            819        11 UA     \n 2      533            529         4      850            830        20 UA     \n 3      542            540         2      923            850        33 AA     \n 4      544            545        -1     1004           1022       -18 B6     \n 5      554            600        -6      812            837       -25 DL     \n 6      554            558        -4      740            728        12 UA     \n 7      555            600        -5      913            854        19 B6     \n 8      557            600        -3      709            723       -14 EV     \n 9      557            600        -3      838            846        -8 B6     \n10      558            600        -2      753            745         8 AA     \n# ℹ 336,766 more rows\n# ℹ 9 more variables: flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;,\n#   air_time &lt;dbl&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-5",
    "href": "SD/2.3_datatransform/index.html#选择列-5",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(where(is.character))\n\n# A tibble: 336,776 × 4\n   carrier tailnum origin dest \n   &lt;chr&gt;   &lt;chr&gt;   &lt;chr&gt;  &lt;chr&gt;\n 1 UA      N14228  EWR    IAH  \n 2 UA      N24211  LGA    IAH  \n 3 AA      N619AA  JFK    MIA  \n 4 B6      N804JB  JFK    BQN  \n 5 DL      N668DN  LGA    ATL  \n 6 UA      N39463  EWR    ORD  \n 7 B6      N516JB  EWR    FLL  \n 8 EV      N829AS  LGA    IAD  \n 9 B6      N593JB  JFK    MCO  \n10 AA      N3ALAA  LGA    ORD  \n# ℹ 336,766 more rows"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-6",
    "href": "SD/2.3_datatransform/index.html#选择列-6",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(!where(is.character)) |&gt;\n  select(contains(\"_\"))\n\n# A tibble: 336,776 × 8\n   dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay air_time\n      &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;dbl&gt;\n 1      517            515         2      830            819        11      227\n 2      533            529         4      850            830        20      227\n 3      542            540         2      923            850        33      160\n 4      544            545        -1     1004           1022       -18      183\n 5      554            600        -6      812            837       -25      116\n 6      554            558        -4      740            728        12      150\n 7      555            600        -5      913            854        19      158\n 8      557            600        -3      709            723       -14       53\n 9      557            600        -3      838            846        -8      140\n10      558            600        -2      753            745         8      138\n# ℹ 336,766 more rows\n# ℹ 1 more variable: time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-7",
    "href": "SD/2.3_datatransform/index.html#选择列-7",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(tail_num = tailnum)\n\n# A tibble: 336,776 × 1\n   tail_num\n   &lt;chr&gt;   \n 1 N14228  \n 2 N24211  \n 3 N619AA  \n 4 N804JB  \n 5 N668DN  \n 6 N39463  \n 7 N516JB  \n 8 N829AS  \n 9 N593JB  \n10 N3ALAA  \n# ℹ 336,766 more rows"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#选择列-8",
    "href": "SD/2.3_datatransform/index.html#选择列-8",
    "title": "Data Transform",
    "section": "选择列",
    "text": "选择列\n\nflights |&gt;\n  select(air_time, everything())\n\n# A tibble: 336,776 × 19\n   air_time  year month   day dep_time sched_dep_time dep_delay arr_time\n      &lt;dbl&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n 1      227  2013     1     1      517            515         2      830\n 2      227  2013     1     1      533            529         4      850\n 3      160  2013     1     1      542            540         2      923\n 4      183  2013     1     1      544            545        -1     1004\n 5      116  2013     1     1      554            600        -6      812\n 6      150  2013     1     1      554            558        -4      740\n 7      158  2013     1     1      555            600        -5      913\n 8       53  2013     1     1      557            600        -3      709\n 9      140  2013     1     1      557            600        -3      838\n10      138  2013     1     1      558            600        -2      753\n# ℹ 336,766 more rows\n# ℹ 11 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;,\n#   flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#重命名",
    "href": "SD/2.3_datatransform/index.html#重命名",
    "title": "Data Transform",
    "section": "重命名",
    "text": "重命名\n\nflights |&gt;\n  rename(tail_num = tailnum)\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tail_num &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#重命名-1",
    "href": "SD/2.3_datatransform/index.html#重命名-1",
    "title": "Data Transform",
    "section": "重命名",
    "text": "重命名\n\nflights |&gt;\n  rename(年份 = 1) |&gt;\n  rename(月份 = 2)\n\n# A tibble: 336,776 × 19\n    年份  月份   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#重命名-2",
    "href": "SD/2.3_datatransform/index.html#重命名-2",
    "title": "Data Transform",
    "section": "重命名",
    "text": "重命名\n\nflights |&gt; select(1:4) |&gt; head(n = 3)\n\n# A tibble: 3 × 4\n   year month   day dep_time\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;\n1  2013     1     1      517\n2  2013     1     1      533\n3  2013     1     1      542\n\n# 重命名\nflights |&gt; select(1:4) |&gt; head(n = 3) |&gt; rename_all(~ c(\"c1\", \"c2\", \"c3\", \"c4\"))\n\n# A tibble: 3 × 4\n     c1    c2    c3    c4\n  &lt;int&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt;\n1  2013     1     1   517\n2  2013     1     1   533\n3  2013     1     1   542"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#重命名-3",
    "href": "SD/2.3_datatransform/index.html#重命名-3",
    "title": "Data Transform",
    "section": "重命名",
    "text": "重命名\n\nflights |&gt; select(1:4) |&gt; head(n = 3)\n\n# A tibble: 3 × 4\n   year month   day dep_time\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;\n1  2013     1     1      517\n2  2013     1     1      533\n3  2013     1     1      542\n\n# 重命名\nflights |&gt; select(1:4) |&gt; head(n = 3) |&gt; rename_all(toupper)\n\n# A tibble: 3 × 4\n   YEAR MONTH   DAY DEP_TIME\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;\n1  2013     1     1      517\n2  2013     1     1      533\n3  2013     1     1      542"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#重命名-4",
    "href": "SD/2.3_datatransform/index.html#重命名-4",
    "title": "Data Transform",
    "section": "重命名",
    "text": "重命名\n\nflights |&gt; select(1:4) |&gt; head(n = 3)\n\n# A tibble: 3 × 4\n   year month   day dep_time\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;\n1  2013     1     1      517\n2  2013     1     1      533\n3  2013     1     1      542\n\n# 重命名\nflights |&gt;\n  select(1:4) |&gt;\n  head(n = 3) |&gt;\n  rename_all(~ paste0(toupper(.), \"_NEW\"))\n\n# A tibble: 3 × 4\n  YEAR_NEW MONTH_NEW DAY_NEW DEP_TIME_NEW\n     &lt;int&gt;     &lt;int&gt;   &lt;int&gt;        &lt;int&gt;\n1     2013         1       1          517\n2     2013         1       1          533\n3     2013         1       1          542"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#练习",
    "href": "SD/2.3_datatransform/index.html#练习",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n将含有下划线的列名中的下划线去掉。\n\nflights |&gt; select(1:4) |&gt; head(n = 3)\n\n# A tibble: 3 × 4\n   year month   day dep_time\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;\n1  2013     1     1      517\n2  2013     1     1      533\n3  2013     1     1      542"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#练习-1",
    "href": "SD/2.3_datatransform/index.html#练习-1",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n将airqualitydf中列名的单位信息去除（前5列）。\n\nairqualitydf &lt;- readxl::read_xlsx(\"../../data/airquality.xlsx\", sheet = 2)\nairqualitydf |&gt; select(1:5)\n\n# A tibble: 20,088 × 5\n   datetime            site  `CO_mg/m3` `CO_24h_mg/m3` `NO2_μg/m3`\n   &lt;dttm&gt;              &lt;chr&gt;      &lt;dbl&gt;          &lt;dbl&gt;       &lt;dbl&gt;\n 1 2024-03-19 01:00:00 1001A        0.1            0.4           5\n 2 2024-03-19 01:00:00 1003A        0.2            0.4           9\n 3 2024-03-19 01:00:00 1004A        0.2            0.4           4\n 4 2024-03-19 01:00:00 1005A        0.1            0.3           6\n 5 2024-03-19 01:00:00 1006A        0.1            0.4           5\n 6 2024-03-19 01:00:00 1007A        0.3            0.5           6\n 7 2024-03-19 01:00:00 1008A        0.2            0.4           2\n 8 2024-03-19 01:00:00 1009A        0.2            0.4           2\n 9 2024-03-19 01:00:00 1010A        0.1            0.3           2\n10 2024-03-19 01:00:00 1011A        0.2            0.4          12\n# ℹ 20,078 more rows"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#filter",
    "href": "SD/2.3_datatransform/index.html#filter",
    "title": "Data Transform",
    "section": "filter",
    "text": "filter\n\nflights |&gt;\n  filter(dep_delay &gt; 120)\n\n# A tibble: 9,723 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      848           1835       853     1001           1950\n 2  2013     1     1      957            733       144     1056            853\n 3  2013     1     1     1114            900       134     1447           1222\n 4  2013     1     1     1540           1338       122     2020           1825\n 5  2013     1     1     1815           1325       290     2120           1542\n 6  2013     1     1     1842           1422       260     1958           1535\n 7  2013     1     1     1856           1645       131     2212           2005\n 8  2013     1     1     1934           1725       129     2126           1855\n 9  2013     1     1     1938           1703       155     2109           1823\n10  2013     1     1     1942           1705       157     2124           1830\n# ℹ 9,713 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#filter-练习",
    "href": "SD/2.3_datatransform/index.html#filter-练习",
    "title": "Data Transform",
    "section": "filter 练习",
    "text": "filter 练习\nFlights that departed on January 1.\n\n\n# A tibble: 842 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 832 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#filter-练习-1",
    "href": "SD/2.3_datatransform/index.html#filter-练习-1",
    "title": "Data Transform",
    "section": "filter 练习",
    "text": "filter 练习\nSelect flights that departed in January or February\n\n\n# A tibble: 51,955 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 51,945 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#filter-练习-2",
    "href": "SD/2.3_datatransform/index.html#filter-练习-2",
    "title": "Data Transform",
    "section": "filter 练习",
    "text": "filter 练习\n\njan1 &lt;- flights |&gt;\n  filter(month == 1 & day == 1)"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#filter-1",
    "href": "SD/2.3_datatransform/index.html#filter-1",
    "title": "Data Transform",
    "section": "filter",
    "text": "filter\n\nflights |&gt;\n  filter(month = 1)"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#filter-2",
    "href": "SD/2.3_datatransform/index.html#filter-2",
    "title": "Data Transform",
    "section": "filter",
    "text": "filter\n\nflights |&gt;\n  filter(month == 1 | 2)\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#排序",
    "href": "SD/2.3_datatransform/index.html#排序",
    "title": "Data Transform",
    "section": "排序",
    "text": "排序\n\nflights |&gt;\n  arrange(year, month, day, dep_time)\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#排序-1",
    "href": "SD/2.3_datatransform/index.html#排序-1",
    "title": "Data Transform",
    "section": "排序",
    "text": "排序\n\nflights |&gt;\n  arrange(desc(dep_delay))\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     9      641            900      1301     1242           1530\n 2  2013     6    15     1432           1935      1137     1607           2120\n 3  2013     1    10     1121           1635      1126     1239           1810\n 4  2013     9    20     1139           1845      1014     1457           2210\n 5  2013     7    22      845           1600      1005     1044           1815\n 6  2013     4    10     1100           1900       960     1342           2211\n 7  2013     3    17     2321            810       911      135           1020\n 8  2013     6    27      959           1900       899     1236           2226\n 9  2013     7    22     2257            759       898      121           1026\n10  2013    12     5      756           1700       896     1058           2020\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#slice",
    "href": "SD/2.3_datatransform/index.html#slice",
    "title": "Data Transform",
    "section": "slice",
    "text": "slice\n\nflights |&gt; head(n = 5)\n\n# A tibble: 5 × 19\n   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n1  2013     1     1      517            515         2      830            819\n2  2013     1     1      533            529         4      850            830\n3  2013     1     1      542            540         2      923            850\n4  2013     1     1      544            545        -1     1004           1022\n5  2013     1     1      554            600        -6      812            837\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;\n\nflights |&gt; slice(1:5)\n\n# A tibble: 5 × 19\n   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n1  2013     1     1      517            515         2      830            819\n2  2013     1     1      533            529         4      850            830\n3  2013     1     1      542            540         2      923            850\n4  2013     1     1      544            545        -1     1004           1022\n5  2013     1     1      554            600        -6      812            837\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#slice-1",
    "href": "SD/2.3_datatransform/index.html#slice-1",
    "title": "Data Transform",
    "section": "slice",
    "text": "slice\n\nflights |&gt;\n  slice_max(dep_delay, n = 5)\n\n# A tibble: 5 × 19\n   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n  &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n1  2013     1     9      641            900      1301     1242           1530\n2  2013     6    15     1432           1935      1137     1607           2120\n3  2013     1    10     1121           1635      1126     1239           1810\n4  2013     9    20     1139           1845      1014     1457           2210\n5  2013     7    22      845           1600      1005     1044           1815\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#slice-2",
    "href": "SD/2.3_datatransform/index.html#slice-2",
    "title": "Data Transform",
    "section": "slice",
    "text": "slice\n\nflights |&gt;\n  slice_min(dep_delay, prop = 0.005)\n\n# A tibble: 2,257 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013    12     7     2040           2123       -43       40           2352\n 2  2013     2     3     2022           2055       -33     2240           2338\n 3  2013    11    10     1408           1440       -32     1549           1559\n 4  2013     1    11     1900           1930       -30     2233           2243\n 5  2013     1    29     1703           1730       -27     1947           1957\n 6  2013     8     9      729            755       -26     1002            955\n 7  2013    10    23     1907           1932       -25     2143           2143\n 8  2013     3    30     2030           2055       -25     2213           2250\n 9  2013     3     2     1431           1455       -24     1601           1631\n10  2013     5     5      934            958       -24     1225           1309\n# ℹ 2,247 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#排序练习",
    "href": "SD/2.3_datatransform/index.html#排序练习",
    "title": "Data Transform",
    "section": "排序练习",
    "text": "排序练习\n根据origin、dest、air_time倒序排序。\n\n\n# A tibble: 336,776 × 19\n   origin dest  air_time  year month   day dep_time sched_dep_time dep_delay\n   &lt;chr&gt;  &lt;chr&gt;    &lt;dbl&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;\n 1 EWR    ALB         50  2013     5     5     1950           2000       -10\n 2 EWR    ALB         45  2013     1    13     1721           1619        62\n 3 EWR    ALB         43  2013     1    20     1623           1619         4\n 4 EWR    ALB         42  2013     4     1     1439           1340        59\n 5 EWR    ALB         41  2013    12     4     1316           1310         6\n 6 EWR    ALB         41  2013     2     1     2034           2000        34\n 7 EWR    ALB         41  2013     5     7     1956           2000        -4\n 8 EWR    ALB         38  2013     1    18     1824           1619       125\n 9 EWR    ALB         38  2013     1    28     1636           1619        17\n10 EWR    ALB         38  2013    11    10     2149           2159       -10\n# ℹ 336,766 more rows\n# ℹ 10 more variables: arr_time &lt;int&gt;, sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;,\n#   carrier &lt;chr&gt;, flight &lt;int&gt;, tailnum &lt;chr&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;,\n#   minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#去重",
    "href": "SD/2.3_datatransform/index.html#去重",
    "title": "Data Transform",
    "section": "去重",
    "text": "去重\n\n# Remove duplicate rows, if any\nflights |&gt;\n  distinct()\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#去重-1",
    "href": "SD/2.3_datatransform/index.html#去重-1",
    "title": "Data Transform",
    "section": "去重",
    "text": "去重\n\n# Find all unique origin and destination pairs\nflights |&gt;\n  distinct(origin, dest)\n\n# A tibble: 224 × 2\n   origin dest \n   &lt;chr&gt;  &lt;chr&gt;\n 1 EWR    IAH  \n 2 LGA    IAH  \n 3 JFK    MIA  \n 4 JFK    BQN  \n 5 LGA    ATL  \n 6 EWR    ORD  \n 7 EWR    FLL  \n 8 LGA    IAD  \n 9 JFK    MCO  \n10 LGA    ORD  \n# ℹ 214 more rows"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#去重-2",
    "href": "SD/2.3_datatransform/index.html#去重-2",
    "title": "Data Transform",
    "section": "去重",
    "text": "去重\n\nflights |&gt;\n  distinct(origin, dest, .keep_all = TRUE)\n\n# A tibble: 224 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 214 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/2.3_datatransform/index.html#欢迎讨论",
    "href": "SD/2.3_datatransform/index.html#欢迎讨论",
    "title": "Data Transform",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#tidy-data",
    "href": "SD/2.1_codestyle/index.html#tidy-data",
    "title": "代码编写规则",
    "section": "tidy data",
    "text": "tidy data\n\nknitr::include_graphics(\"../../image/tidy-1.png\", dpi = 270)"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#pipe管道",
    "href": "SD/2.1_codestyle/index.html#pipe管道",
    "title": "代码编写规则",
    "section": "pipe（管道） |>",
    "text": "pipe（管道） |&gt;\n\nrequire(patchwork)\nplot(1:10)\n1:10 |&gt; plot()\nplot(x = 1:10, y = sin(1:10))\n1:10 |&gt; plot(y = sin(1:10))"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#pipe管道-1",
    "href": "SD/2.1_codestyle/index.html#pipe管道-1",
    "title": "代码编写规则",
    "section": "pipe（管道）：%>%",
    "text": "pipe（管道）：%&gt;%\nrequire(magrittr)\n1:10 %&gt;% plot()\n1:10 %&gt;% plot(y = sin(1:10))\nsin(1:10) %&gt;% plot(1:10, .)\nsin(1:10) |&gt; plot(x = 1:10, y = _)"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#代码编写规则",
    "href": "SD/2.1_codestyle/index.html#代码编写规则",
    "title": "代码编写规则",
    "section": "代码编写规则",
    "text": "代码编写规则\n\n# Strive for:\nshort_flights &lt;- flights |&gt; filter(air_time &lt; 60)\n# Avoid:\nSHORTFLIGHTS &lt;- flights |&gt; filter(air_time &lt; 60)\n\n# Strive for\nz &lt;- (a + b)^2 / d\n# Avoid\nz &lt;- (a + b)^2 / d\n\n# Strive for\nmean(x, na.rm = TRUE)\n# Avoid\nmean(x, na.rm = TRUE)"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#练习",
    "href": "SD/2.1_codestyle/index.html#练习",
    "title": "代码编写规则",
    "section": "练习",
    "text": "练习\n\nflights |&gt;\n  filter(dest == \"IAH\") |&gt;\n  group_by(year, month, day) |&gt;\n  summarize(n = n(), delay = mean(arr_delay, na.rm = TRUE)) |&gt;\n  filter(n &gt; 10)"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#练习-1",
    "href": "SD/2.1_codestyle/index.html#练习-1",
    "title": "代码编写规则",
    "section": "练习",
    "text": "练习\n\nflights |&gt;\n  filter(dest == \"IAH\") |&gt;\n  group_by(year, month, day) |&gt;\n  summarize(n = n(), delay = mean(arr_delay, na.rm = TRUE)) |&gt;\n  filter(n &gt; 10)"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#quarto",
    "href": "SD/2.1_codestyle/index.html#quarto",
    "title": "代码编写规则",
    "section": "quarto",
    "text": "quarto"
  },
  {
    "objectID": "SD/2.1_codestyle/index.html#欢迎讨论",
    "href": "SD/2.1_codestyle/index.html#欢迎讨论",
    "title": "代码编写规则",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#下载excel文件",
    "href": "SD/1.3_Excel基础/index.html#下载excel文件",
    "title": "三、Excel基础",
    "section": "下载excel文件",
    "text": "下载excel文件\nhttps://git.drwater.net/course/RWEP/raw/branch/main/data/airquality.xlsx"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#tidy-data",
    "href": "SD/1.3_Excel基础/index.html#tidy-data",
    "title": "三、Excel基础",
    "section": "Tidy data",
    "text": "Tidy data\n由Hadley Wickham提出，tidy data 是一种结构化数据的组织方式，使得数据分析和可视化等操作更加简单、直观和有效。它有助于减少数据的混乱和复杂性，并促进数据的整洁性和易用性。\n\n每个变量一列\n每个观察一行\n每个表单一个表"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#excel主要学习内容",
    "href": "SD/1.3_Excel基础/index.html#excel主要学习内容",
    "title": "三、Excel基础",
    "section": "Excel主要学习内容",
    "text": "Excel主要学习内容\n\n常用函数\n数据筛选/排序\n条件格式化\n数据透视表/图"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#常用函数",
    "href": "SD/1.3_Excel基础/index.html#常用函数",
    "title": "三、Excel基础",
    "section": "常用函数",
    "text": "常用函数\n引用位置\n\n相对引用\n\n相对引用是默认的引用类型。\n当公式被复制到其他单元格时，引用的单元格会相对移动。\n\n\n=A1 # 在 B1 单元格中的公式，引用了 A1 单元格的值\n=B1+C1 # 在 D1 单元格中的公式，引用了 B1 和 C1 单元格的值\n绝对引用\n\n绝对引用固定了单元格的地址，不会随公式的复制而改变。\n\n=$A$1 # 在 B1 单元格中的公式，始终引用 A1 单元格的值"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#常用函数-1",
    "href": "SD/1.3_Excel基础/index.html#常用函数-1",
    "title": "三、Excel基础",
    "section": "常用函数",
    "text": "常用函数\n\nSUM：求和\nAVERAGE：求平均值\nMAX：求最大值\nMIN：求最小值"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#常用函数-2",
    "href": "SD/1.3_Excel基础/index.html#常用函数-2",
    "title": "三、Excel基础",
    "section": "常用函数",
    "text": "常用函数\n\nCOUNT：计数非空单元格\nCOUNTA：计数非空单元格（包括文本）\nCOUNTIF：根据条件计数\nSUMIF：根据条件求和\nAVERAGEIF：根据条件求平均值"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#常用函数-3",
    "href": "SD/1.3_Excel基础/index.html#常用函数-3",
    "title": "三、Excel基础",
    "section": "常用函数",
    "text": "常用函数\n\nVLOOKUP：垂直查找\nHLOOKUP：水平查找\nINDEX：返回指定位置的值\nMATCH：查找值在区域中的位置\nIF：条件判断函数"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#常用函数-4",
    "href": "SD/1.3_Excel基础/index.html#常用函数-4",
    "title": "三、Excel基础",
    "section": "常用函数",
    "text": "常用函数\n\nCONCATENATE：连接多个文本字符串\nLEFT：提取文本左边的字符\nRIGHT：提取文本右边的字符\nMID：提取文本中间的字符\nTEXT：将数值格式化为文本"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#常用函数-5",
    "href": "SD/1.3_Excel基础/index.html#常用函数-5",
    "title": "三、Excel基础",
    "section": "常用函数",
    "text": "常用函数\n\nROUND：四舍五入到指定位数\nROUNDUP：向上取整\nROUNDDOWN：向下取整"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#常用函数-6",
    "href": "SD/1.3_Excel基础/index.html#常用函数-6",
    "title": "三、Excel基础",
    "section": "常用函数",
    "text": "常用函数\n\nTODAY：返回当前日期\nNOW：返回当前日期和时间\nDATE：返回指定年、月、日的日期\nTIME：返回指定小时、分钟、秒的时间"
  },
  {
    "objectID": "SD/1.3_Excel基础/index.html#欢迎讨论",
    "href": "SD/1.3_Excel基础/index.html#欢迎讨论",
    "title": "三、Excel基础",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#r语言实践部分课程简介",
    "href": "SD/1.1_R语言介绍/index.html#r语言实践部分课程简介",
    "title": "一、R语言介绍",
    "section": "R语言实践部分课程简介",
    "text": "R语言实践部分课程简介\n接下来的课程由我来带着大家一起学习、实践基于R语言的数据分析。\n自我介绍\n\n苏命：来自中国科学院生态环境研究中心\n主要从事水源水质水生态方面的研究\n\n课件\n\n采用R语言+quarto完成\n网页公开：https://drc.drwater.net/course/public/su2026rwep/PUB/\n课件代码：https://git.drwater.net/course/su2026rwep.git"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#如何学习接下来的内容",
    "href": "SD/1.1_R语言介绍/index.html#如何学习接下来的内容",
    "title": "一、R语言介绍",
    "section": "如何学习接下来的内容？",
    "text": "如何学习接下来的内容？\n\n上课形式：\n\n实践操作为主，目的是让每一位同学都能独立开展基于R的数据分析\n2-3人一组，自由分组，相互帮助\n\n准备工作：\n\n个人笔记本电脑，Microsoft Windows、GNU/Linux、MacOS系统\n安装好Microsoft Excel\n能联网\n如果电池不够用，建议带上插座\n\n上课规则\n\n可随时打断，不懂就问\n无特殊情况不迟到，否则操作过程容易跟不上"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#rstudio-server",
    "href": "SD/1.1_R语言介绍/index.html#rstudio-server",
    "title": "一、R语言介绍",
    "section": "Rstudio server",
    "text": "Rstudio server\n\nServer 地址：https://rs1.drwater.net\n用户名: ruser01, ruser02, …, ruser06\n密码：rwep2026"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#r语言的历史",
    "href": "SD/1.1_R语言介绍/index.html#r语言的历史",
    "title": "一、R语言介绍",
    "section": "R语言的历史",
    "text": "R语言的历史\n\n\n\n1976年：\n\n前身是S语言，由贝尔实验室John Chambers及其同事开发\n\n1993年：\n\nR语言由Ross Ihaka和Robert Gentleman在奥克兰大学开发\nR的诞生是为了提供一个强大的统计计算和图形显示的平台\n\n\n\n\n\n\n1995年：R发布第一个公开版本\n2000年代： R语言逐渐成为统计学和数据科学领域重要工具\n2010年：Hadley Wickham发布了ggplot2包，数据可视化方面更强\n2016年：创建CRAN（Comprehensive R Archive Network），R包中央库\n至今\n\nR语言已成为数据科学和统计学领域最受欢迎的工具之一，被广泛用于数据分析、机器学习、数据可视化等领域"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#r的特点",
    "href": "SD/1.1_R语言介绍/index.html#r的特点",
    "title": "一、R语言介绍",
    "section": "R的特点",
    "text": "R的特点\n一般特点\n\n免费、开源、支持各个主要计算机系统。\n完整的程序设计语言，基于函数和对象。\n支持完善的数据类型，如向量、矩阵、数据框等。\n\n技术特点\n\n所有存在都是对象。\n所有动作都是函数调用。\n支持函数编程和对象类。\n是动态类型语言，运行速度相对较慢。"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#r的参考资料",
    "href": "SD/1.1_R语言介绍/index.html#r的参考资料",
    "title": "一、R语言介绍",
    "section": "R的参考资料",
    "text": "R的参考资料\n推荐参考书\n\nHadley Wickham and Garrett Grolemund(2022). R for Data Science\nHadley Wickham(2019). Advanced R\nHadley Wickham(2016). ggplot2 Elegant Graphics for Data Analysis\nJohn M. Chambers(2008). Software for Data Analysis-Programming with R\nVenables, W. N. & Ripley, B. D.(2002). Modern Applied Statistics with S (MASS)"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#r的参考资料-1",
    "href": "SD/1.1_R语言介绍/index.html#r的参考资料-1",
    "title": "一、R语言介绍",
    "section": "R的参考资料",
    "text": "R的参考资料\n中文参考书\n\n《R语言编程艺术》\n《R语言实战》\n《R语言教程与实践》\n《R语言数据可视化实战》\n《R语言从入门到精通》"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#r的下载与安装",
    "href": "SD/1.1_R语言介绍/index.html#r的下载与安装",
    "title": "一、R语言介绍",
    "section": "R的下载与安装",
    "text": "R的下载与安装\nR的下载与安装\n\nR的官方网站：https://www.r-project.org/\nCRAN镜像网站：http://mirror.bjtu.edu.cn/cran/\n下载官方的R软件后按提示安装"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#rstudio",
    "href": "SD/1.1_R语言介绍/index.html#rstudio",
    "title": "一、R语言介绍",
    "section": "RStudio",
    "text": "RStudio\n什么是RStudio？\n\nRStudio官方网站: https://posit.co/products/open-source/rstudio/\nRStudio是一个集成开发环境（IDE），专门用于R语言编程和数据分析。\n它提供了一个直观的界面，使得编写、调试和运行R代码变得更加容易。"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#rstudio-1",
    "href": "SD/1.1_R语言介绍/index.html#rstudio-1",
    "title": "一、R语言介绍",
    "section": "RStudio",
    "text": "RStudio\nRStudio的功能\n\n代码编辑器：提供了语法高亮、自动补全和代码折叠等功能。\n控制台：用于直接执行R代码并查看结果。\n环境和历史记录：可以查看当前加载的数据、函数和变量，以及之前执行过的命令。\n图形和可视化：RStudio内置了绘图设备，可以方便地创建各种统计图表。\n文件管理器：可直接在RStudio中管理文件和项目。\n包管理器：方便地安装、更新和管理R包。\nMarkdown编辑器：支持Markdown格式，可以创建美观的文档和报告。"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#如何获取rstudio",
    "href": "SD/1.1_R语言介绍/index.html#如何获取rstudio",
    "title": "一、R语言介绍",
    "section": "如何获取RStudio？",
    "text": "如何获取RStudio？\n\nRStudio可以从官方网站免费下载并安装：RStudio官网\nRStudio是一个强大的R编程环境，为R用户提供了丰富的功能和工具。\n它简化了R语言的使用，提高了数据分析和可视化的效率。"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#扩展包r-package",
    "href": "SD/1.1_R语言介绍/index.html#扩展包r-package",
    "title": "一、R语言介绍",
    "section": "扩展包：R package",
    "text": "扩展包：R package\n\nR有一万多个扩展软件包，提供了各种各样的功能\n已安装的基本R包，如base, stats, graphics等，启动R时默认载入\n其它扩展包需要用library(.)函数载入运行；或者采用dplyr::filter(.)方式\n\n\nCodeOutput\n\n\n\n# load a R package\nlibrary(ggplot2)\n\n# plot it based on the functions from `ggplot2` package\nmtcars |&gt;\n  dplyr::filter(cyl != 8) |&gt;\n  ggplot(aes(hp, mpg, color = am)) +\n  geom_point() +\n  geom_smooth(formula = y ~ x, method = \"loess\")"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#安装r包",
    "href": "SD/1.1_R语言介绍/index.html#安装r包",
    "title": "一、R语言介绍",
    "section": "安装R包",
    "text": "安装R包\n\n以安装sos包为例。\n在RStudio中调用“Tools”菜单的“Install Packages”，输入或选择sos即可安装。\nR图形界面安装\n如果不用RStudio， 在R图形界面选菜单“程序包-安装程序包”进行安装。\n在CRAN镜像选择窗口中选择中国的镜像，如“China (Beijing 2)”，然后选择要安装的扩展软件包名称即可完成下载和安装。\n程序安装\n\n# 指定镜像网站并安装扩展包\noptions(repos = c(CRAN = \"https://mirror.tuna.tsinghua.edu.cn/CRAN/\"))\ninstall.packages(\"sos\")\n\n# 当R包不是CRAN标准包，代码放在[github](https://github.com)\nif (!require(devtools)) install.packages('devtools')\ndevtools::install_github(\"kjhealy/socviz\")"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#安装r包-1",
    "href": "SD/1.1_R语言介绍/index.html#安装r包-1",
    "title": "一、R语言介绍",
    "section": "安装R包",
    "text": "安装R包\n视频"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#结语",
    "href": "SD/1.1_R语言介绍/index.html#结语",
    "title": "一、R语言介绍",
    "section": "结语",
    "text": "结语\n\nR语言是一种强大的统计计算和数据分析工具，适用于各种领域。\n通过学习R语言，可以进行数据处理、统计分析和数据可视化。"
  },
  {
    "objectID": "SD/1.1_R语言介绍/index.html#欢迎讨论",
    "href": "SD/1.1_R语言介绍/index.html#欢迎讨论",
    "title": "一、R语言介绍",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "version.html",
    "href": "version.html",
    "title": "区域水环境污染数据分析实践",
    "section": "",
    "text": "tibble::tibble(branch = system(\"git branch -a\", intern = TRUE)) |&gt;\n  dplyr::filter(grepl(\"remotes\", branch)) |&gt;\n  dplyr::filter(!grepl(\"HEAD\", branch)) |&gt;\n  dplyr::mutate(branch = gsub(\"^.*\\\\/\", \"\", branch)) |&gt;\n  dplyr::arrange(desc(branch)) |&gt;\n  dplyr::mutate(\n    htmlstr = paste0(\n      \"## [**Version**: \",\n      branch,\n      \"](https://drc.drwater.net/{{&lt; var projtype &gt;}}/\",\n      ifelse(grepl(\"pub\", branch, ignore.case = TRUE), \"public\", \"protected\"),\n      \"/{{&lt; var reponame &gt;}}/\",\n      branch,\n      \"/)\"\n    )\n  ) |&gt;\n  dplyr::pull(htmlstr) |&gt;\n  paste(collapse = \"\\n\\n\") |&gt;\n  cat()"
  },
  {
    "objectID": "version.html#version-pub",
    "href": "version.html#version-pub",
    "title": "区域水环境污染数据分析实践",
    "section": "Version: PUB",
    "text": "Version: PUB\n\nVersions\n# 方法2：先获取分支列表，再逐个查询\nbranches &lt;- system(\"git branch -r\", intern = TRUE)\nbranches &lt;- trimws(branches) # 去除空白字符\nbranches &lt;- branches[!grepl(\"HEAD\", branches)]\nbranches &lt;- tibble::tibble(branch = branches) |&gt;\n  dplyr::arrange(dplyr::desc(branch)) |&gt;\n  dplyr::pull(branch)\n\ncat(\"\\n\")\nfor (branch in branches) {\n  if (branch != \"\") {\n    cat(\"### \", gsub(\"^.*/\", \"\", branch), \"\\n\\n\")\n    commits &lt;- system(\n      paste0(\n        \"git log --pretty=format:\\\"%h - %an, %ar : %s\\\" -5 \\\"\",\n        branch,\n        \"\\\"\"\n      ),\n      intern = TRUE\n    )\n    # all_commits[[branch]] &lt;- paste0(\"- \", commits)\n    cat(paste0(\"- \", commits), sep = \"\\n\")\n    cat(\"\\n\")\n  }\n}\n\n\nPUB\n\naeb5aab - ming, 5 days ago : render compile\n8288dac - ming, 5 days ago : render compile\n1dcd453 - ming, 5 days ago : render compile\n32a2989 - ming, 5 days ago : render compile\n845b840 - ming, 5 days ago : render compile"
  },
  {
    "objectID": "index.html",
    "href": "index.html",
    "title": "区域水环境污染数据分析实践",
    "section": "",
    "text": "基本信息\n\n课程名称：区域水环境污染数据分析实践Data analysis practice of regional water environment pollution\n授课教师：王为东、苏命\n课程教室：教二楼-138\n课程时间：\n\n05月21日8:30-11:20 ✔\n05月26日8:30-11:20\n05月28日8:30-11:20\n06月02日8:30-11:20\n06月04日8:30-11:20\n\n\n\n\n课件\n\n网页公开：https://drc.drwater.net/course/public/su2026rwep/PUB/\n课件代码：https://git.drwater.net/course/su2026rwep.git"
  },
  {
    "objectID": "SD/index.html#r语言语法基础",
    "href": "SD/index.html#r语言语法基础",
    "title": "区域水环境污染数据分析实践",
    "section": "1.2_R语言语法基础",
    "text": "1.2_R语言语法基础"
  },
  {
    "objectID": "SD/index.html#excel基础",
    "href": "SD/index.html#excel基础",
    "title": "区域水环境污染数据分析实践",
    "section": "1.3_Excel基础",
    "text": "1.3_Excel基础"
  },
  {
    "objectID": "SD/index.html#课后作业6",
    "href": "SD/index.html#课后作业6",
    "title": "区域水环境污染数据分析实践",
    "section": "1.9_课后作业6",
    "text": "1.9_课后作业6"
  },
  {
    "objectID": "SD/index.html#codestyle",
    "href": "SD/index.html#codestyle",
    "title": "区域水环境污染数据分析实践",
    "section": "2.1_codestyle",
    "text": "2.1_codestyle"
  },
  {
    "objectID": "SD/index.html#dataimport",
    "href": "SD/index.html#dataimport",
    "title": "区域水环境污染数据分析实践",
    "section": "2.2_dataimport",
    "text": "2.2_dataimport"
  },
  {
    "objectID": "SD/index.html#datatransform",
    "href": "SD/index.html#datatransform",
    "title": "区域水环境污染数据分析实践",
    "section": "2.3_datatransform",
    "text": "2.3_datatransform"
  },
  {
    "objectID": "SD/index.html#datatransform-1",
    "href": "SD/index.html#datatransform-1",
    "title": "区域水环境污染数据分析实践",
    "section": "3.1_datatransform",
    "text": "3.1_datatransform"
  },
  {
    "objectID": "SD/index.html#课后作业8",
    "href": "SD/index.html#课后作业8",
    "title": "区域水环境污染数据分析实践",
    "section": "3.9_课后作业8",
    "text": "3.9_课后作业8"
  },
  {
    "objectID": "SD/index.html#datavisualize",
    "href": "SD/index.html#datavisualize",
    "title": "区域水环境污染数据分析实践",
    "section": "4.1_datavisualize",
    "text": "4.1_datavisualize"
  },
  {
    "objectID": "SD/index.html#实践部分",
    "href": "SD/index.html#实践部分",
    "title": "区域水环境污染数据分析实践",
    "section": "4.2_实践部分",
    "text": "4.2_实践部分"
  },
  {
    "objectID": "SD/index.html#model",
    "href": "SD/index.html#model",
    "title": "区域水环境污染数据分析实践",
    "section": "5.1_model",
    "text": "5.1_model"
  },
  {
    "objectID": "SD/index.html#空间分析",
    "href": "SD/index.html#空间分析",
    "title": "区域水环境污染数据分析实践",
    "section": "5.2_空间分析",
    "text": "5.2_空间分析"
  },
  {
    "objectID": "SD/index.html#大数据分析工具",
    "href": "SD/index.html#大数据分析工具",
    "title": "区域水环境污染数据分析实践",
    "section": "5.3_大数据分析工具",
    "text": "5.3_大数据分析工具"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数据类型",
    "href": "SD/1.2_R语言语法基础/index.html#数据类型",
    "title": "二、R语言语法基础",
    "section": "数据类型",
    "text": "数据类型\n数值型\nR中的数值型数据可以是整数或浮点数。\n\n(x &lt;- 10)\n\n[1] 10\n\n(y &lt;- 1.23e-2)\n\n[1] 0.0123\n\n(z &lt;- pi)\n\n[1] 3.141593"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数据类型-1",
    "href": "SD/1.2_R语言语法基础/index.html#数据类型-1",
    "title": "二、R语言语法基础",
    "section": "数据类型",
    "text": "数据类型\n字符串\n\nR 中的字符串用引号括起来，建议用双引号。\n中文编码主要有GBK编码和UTF-8编码， 可能遇到编码错误造成乱码。RStudio软件默认采用UTF-8编码，在R程序运行时字符串一般用UTF-8编码保存。\n\n\n(str &lt;- \"Hello, World!\")\n\n[1] \"Hello, World!\"\n\n(str &lt;- 'Hello, World!')\n\n[1] \"Hello, World!\"\n\n(str &lt;- 'He was very angry, and shouted: \"Stop!\"')\n\n[1] \"He was very angry, and shouted: \\\"Stop!\\\"\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数据类型-2",
    "href": "SD/1.2_R语言语法基础/index.html#数据类型-2",
    "title": "二、R语言语法基础",
    "section": "数据类型",
    "text": "数据类型\n逻辑\n\nc(TRUE, FALSE)\n\n[1]  TRUE FALSE"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#特殊值",
    "href": "SD/1.2_R语言语法基础/index.html#特殊值",
    "title": "二、R语言语法基础",
    "section": "特殊值",
    "text": "特殊值\n\n\n\nNA: 这是最常见的NA类型，表示缺失值\nNA_integer_: 这是NA的整数类型\nNA_real_: 这是NA的实数类型\nNA_character_: 这是NA的字符类型\nNA_complex_: 这是NA的复数类型\n\n\n\npi\n\n[1] 3.141593\n\nNA\n\n[1] NA\n\nNA_character_\n\n[1] NA\n\nInf\n\n[1] Inf"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#特殊值-1",
    "href": "SD/1.2_R语言语法基础/index.html#特殊值-1",
    "title": "二、R语言语法基础",
    "section": "特殊值",
    "text": "特殊值\n在 R 中，Inf 代表正无穷大（positive infinity），而 -Inf 则代表负无穷大（negative infinity）。这些值通常出现在数学计算中，例如除以零或对负数取对数等操作可能会导致无穷大的结果。\n\n# 正无穷大\n(x &lt;- Inf)\n\n[1] Inf\n\n# 负无穷大\n(y &lt;- -Inf)\n\n[1] -Inf\n\n# 无穷大的运算\n(a &lt;- 5 / 0)\n\n[1] Inf\n\n(b &lt;- log(0))\n\n[1] -Inf"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#变量赋值",
    "href": "SD/1.2_R语言语法基础/index.html#变量赋值",
    "title": "二、R语言语法基础",
    "section": "变量赋值",
    "text": "变量赋值\n在 R 中，可以使用 &lt;- 或 = 运算符将值赋给变量，建议用&lt;-。\n\n# 使用 `&lt;-` 运算符\n(x &lt;- 10)\n\n[1] 10\n\n(y &lt;- \"hello\")\n\n[1] \"hello\"\n\n# 使用 `=` 运算符\n(z = c(1, 2, 3))\n\n[1] 1 2 3"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#变量赋值-1",
    "href": "SD/1.2_R语言语法基础/index.html#变量赋值-1",
    "title": "二、R语言语法基础",
    "section": "变量赋值",
    "text": "变量赋值\n\n# 向量赋值\n(vec &lt;- c(1, 2, 3, 4, 5))\n\n[1] 1 2 3 4 5\n\n# 矩阵赋值\n(mat &lt;- matrix(1:9, nrow = 3))\n\n     [,1] [,2] [,3]\n[1,]    1    4    7\n[2,]    2    5    8\n[3,]    3    6    9"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#变量赋值-2",
    "href": "SD/1.2_R语言语法基础/index.html#变量赋值-2",
    "title": "二、R语言语法基础",
    "section": "变量赋值",
    "text": "变量赋值\n数据框赋值\n\n(df &lt;- data.frame(\n  Name = c(\"Alice\", \"Bob\", \"Charlie\"),\n  Age = c(25, 30, 35),\n  Married = c(TRUE, FALSE, TRUE)\n))\n\n     Name Age Married\n1   Alice  25    TRUE\n2     Bob  30   FALSE\n3 Charlie  35    TRUE"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#变量赋值-3",
    "href": "SD/1.2_R语言语法基础/index.html#变量赋值-3",
    "title": "二、R语言语法基础",
    "section": "变量赋值",
    "text": "变量赋值\n列表赋值\n\n(lst &lt;- list(\n  numbers = c(1, 2, 3),\n  strings = c(\"a\", \"b\", \"c\"),\n  matrix = matrix(1:9, nrow = 3)\n))\n\n$numbers\n[1] 1 2 3\n\n$strings\n[1] \"a\" \"b\" \"c\"\n\n$matrix\n     [,1] [,2] [,3]\n[1,]    1    4    7\n[2,]    2    5    8\n[3,]    3    6    9"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数学函数",
    "href": "SD/1.2_R语言语法基础/index.html#数学函数",
    "title": "二、R语言语法基础",
    "section": "数学函数",
    "text": "数学函数\n\nround(pi, digits = 3)\n\n[1] 3.142\n\nlog(10)\n\n[1] 2.302585\n\n\n\nabs(x): 返回 x 的绝对值\nsqrt(x): 返回 x 的平方根\nexp(x): 以e为底的指数函数值\nlog(x, base): 以指定底数的对数函数的值，默认底数为e\nlog10(x): 10为底的对数值\nlog2(x): 2为底的对数值\nfloor(x): 不大于x的最大整数\nceiling(x): 不小于x的最小整数"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数学函数-1",
    "href": "SD/1.2_R语言语法基础/index.html#数学函数-1",
    "title": "二、R语言语法基础",
    "section": "数学函数",
    "text": "数学函数\n\nsin(x), cos(x), tan(x): 返回 x 的正弦、余弦和正切值，其中 x 为弧度\nasin(x), acos(x), atan(x): x 的反正弦、反余弦和反正切值，返回弧度\nsinh(x), cosh(x), tanh(x): 返回 x 的双曲正弦、双曲余弦和双曲正切值\nasinh(x), acosh(x), atanh(x): 反双曲正弦、反双曲余弦和反双曲正切值\nround(x, digits): x 四舍五入，digits指定小数点后位数\ntrunc(x): 返回x截断值，即去掉小数部分\nsign(x): 返回符号"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#统计函数",
    "href": "SD/1.2_R语言语法基础/index.html#统计函数",
    "title": "二、R语言语法基础",
    "section": "统计函数",
    "text": "统计函数\n\nx &lt;- c(5, 10, 15, 20, 25)\n# 计算向量的平均值\nmean(x)\n\n[1] 15\n\n# 计算向量的中位数\nmedian(x)\n\n[1] 15\n\n# 计算向量的最小值\nmin(x)\n\n[1] 5\n\n# 计算向量的最大值\nmax(x)\n\n[1] 25\n\n# 计算向量的总和\nsum(x)\n\n[1] 75"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#统计函数-1",
    "href": "SD/1.2_R语言语法基础/index.html#统计函数-1",
    "title": "二、R语言语法基础",
    "section": "统计函数",
    "text": "统计函数\n\n# 计算向量的标准差\nsd(x)\n\n[1] 7.905694\n\n# 计算向量的方差\nvar(x)\n\n[1] 62.5\n\n# 计算向量的分位数\nquantile(x, probs = c(0.25, 0.5, 0.75))\n\n25% 50% 75% \n 10  15  20 \n\n# 统计向量的频数\n(frequency &lt;- table(x))\n\nx\n 5 10 15 20 25 \n 1  1  1  1  1"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#统计函数-2",
    "href": "SD/1.2_R语言语法基础/index.html#统计函数-2",
    "title": "二、R语言语法基础",
    "section": "统计函数",
    "text": "统计函数\n执行两样本或单样本 t 检验\n\ny &lt;- c(3, 8, 13, 18, 23)\nt.test(x, y)\n\n\n    Welch Two Sample t-test\n\ndata:  x and y\nt = 0.4, df = 8, p-value = 0.6996\nalternative hypothesis: true difference in means is not equal to 0\n95 percent confidence interval:\n -9.530021 13.530021\nsample estimates:\nmean of x mean of y \n       15        13"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#统计函数-3",
    "href": "SD/1.2_R语言语法基础/index.html#统计函数-3",
    "title": "二、R语言语法基础",
    "section": "统计函数",
    "text": "统计函数\nWilcoxon-Mann-Whitney检验\n\nwilcox.test(x, y)\n\n\n    Wilcoxon rank sum exact test\n\ndata:  x and y\nW = 15, p-value = 0.6905\nalternative hypothesis: true location shift is not equal to 0\n\n\n[什么是 Wilcoxon-Mann-Whitney检验？](https://zhuanlan.zhihu.com/p/613524533）"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#统计函数-4",
    "href": "SD/1.2_R语言语法基础/index.html#统计函数-4",
    "title": "二、R语言语法基础",
    "section": "统计函数",
    "text": "统计函数\n创建向量的直方图\n\nhist(x)"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#函数调用-练习",
    "href": "SD/1.2_R语言语法基础/index.html#函数调用-练习",
    "title": "二、R语言语法基础",
    "section": "函数调用-练习",
    "text": "函数调用-练习\n题目：设有一组数据集合 x 包含了一些整数，请编写R语言代码计算并输出以下指标：\n\n平均值（mean）\n中位数（median）\n最大值（maximum）\n最小值（minimum）\n数据集合中所有元素的和（sum）\n数据集合的标准差（standard deviation）\n数据集合 x 为：x &lt;- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)\n\n要求：使用R语言编写函数，输入参数为数据集合 x，输出为以上指标的值。"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#控制流程",
    "href": "SD/1.2_R语言语法基础/index.html#控制流程",
    "title": "二、R语言语法基础",
    "section": "控制流程",
    "text": "控制流程\nif-else 语句\n\nx &lt;- 10\n\nif (x &gt; 10) {\n  print(\"x 大于 10\")\n} else {\n  print(\"x 不大于 10\")\n}\n\n[1] \"x 不大于 10\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#控制流程-1",
    "href": "SD/1.2_R语言语法基础/index.html#控制流程-1",
    "title": "二、R语言语法基础",
    "section": "控制流程",
    "text": "控制流程\nfor 循环\n\nfor (i in 1:5) {\n  print(i)\n}\n\n[1] 1\n[1] 2\n[1] 3\n[1] 4\n[1] 5"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#自定义函数",
    "href": "SD/1.2_R语言语法基础/index.html#自定义函数",
    "title": "二、R语言语法基础",
    "section": "自定义函数",
    "text": "自定义函数\n定义函数\n使用 function 关键字定义函数，并使用 return 关键字返回结果。\n\nmy_function &lt;- function(x, y) {\n  return(x + y)\n}\n\n调用函数\n\nresult &lt;- my_function(3, 4)\nprint(result)\n\n[1] 7"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数据结构",
    "href": "SD/1.2_R语言语法基础/index.html#数据结构",
    "title": "二、R语言语法基础",
    "section": "数据结构",
    "text": "数据结构\n向量\n向量是一维数组，可以包含相同类型的元素。\n\n(v &lt;- c(1, 2, 3, 4, 5))\n\n[1] 1 2 3 4 5\n\n\n列表\n列表可以包含不同类型的元素。\n\n(l &lt;- list(a = 1, b = \"hello\", c = TRUE))\n\n$a\n[1] 1\n\n$b\n[1] \"hello\"\n\n$c\n[1] TRUE"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数值型向量",
    "href": "SD/1.2_R语言语法基础/index.html#数值型向量",
    "title": "二、R语言语法基础",
    "section": "数值型向量",
    "text": "数值型向量\n什么是数值型向量？\n\n在 R 中，向量是一种基本的数据结构。\n数值型向量包含相同类型的数值元素。\n\n创建数值型向量\n\n# 使用 c() 函数创建数值型向量\n(numeric_vector &lt;- c(1, 2, 3, 4, 5))\n\n[1] 1 2 3 4 5"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数值型向量-1",
    "href": "SD/1.2_R语言语法基础/index.html#数值型向量-1",
    "title": "二、R语言语法基础",
    "section": "数值型向量",
    "text": "数值型向量\n向量运算\n\n# 创建两个数值型向量\n(vector1 &lt;- c(1, 2, 3))\n\n[1] 1 2 3\n\n(vector2 &lt;- c(4, 5, 6))\n\n[1] 4 5 6\n\n# 执行向量加法\n(result &lt;- vector1 + vector2)\n\n[1] 5 7 9\n\n# 执行向量乘法\n(result &lt;- vector1 * vector2)\n\n[1]  4 10 18"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#向量运算-1",
    "href": "SD/1.2_R语言语法基础/index.html#向量运算-1",
    "title": "二、R语言语法基础",
    "section": "向量运算",
    "text": "向量运算\n向量求和\n\n# 创建数值型向量\nvector &lt;- c(1, 2, 3, 4, 5)\n\n# 求和\n(sum_result &lt;- sum(vector))\n\n[1] 15"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#向量运算-2",
    "href": "SD/1.2_R语言语法基础/index.html#向量运算-2",
    "title": "二、R语言语法基础",
    "section": "向量运算",
    "text": "向量运算\n向量平均值\n\n# 创建数值型向量\nvector &lt;- c(1, 2, 3, 4, 5)\n\n# 平均值\n(mean_result &lt;- mean(vector))\n\n[1] 3"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-数值运算",
    "href": "SD/1.2_R语言语法基础/index.html#运算-数值运算",
    "title": "二、R语言语法基础",
    "section": "运算-数值运算",
    "text": "运算-数值运算\n\na 的平方。\nb 的立方。\na 除以 b 的商和余数。\n\n要求：使用R语言编写函数，输入参数为 a 和 b，输出为上述结果。"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-逻辑运算",
    "href": "SD/1.2_R语言语法基础/index.html#运算-逻辑运算",
    "title": "二、R语言语法基础",
    "section": "运算-逻辑运算",
    "text": "运算-逻辑运算\n\nall(c(FALSE, 2, 1:3, 3) &gt; 1)\n\n[1] FALSE\n\nany(c(FALSE, 2, 1:3, 3) &gt; 1)\n\n[1] TRUE\n\n(flag1 &lt;- FALSE)\n\n[1] FALSE\n\n(flag2 &lt;- (3 &gt; 2))\n\n[1] TRUE\n\n(flag3 &lt;- TRUE * TRUE)\n\n[1] 1\n\n(flag4 &lt;- TRUE * FALSE)\n\n[1] 0\n\n(flag5 &lt;- TRUE & FALSE)\n\n[1] FALSE\n\n(flag6 &lt;- TRUE | FALSE)\n\n[1] TRUE"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-逻辑运算-1",
    "href": "SD/1.2_R语言语法基础/index.html#运算-逻辑运算-1",
    "title": "二、R语言语法基础",
    "section": "运算-逻辑运算",
    "text": "运算-逻辑运算\n\nwhich\n\n\nwhich(c(FALSE, TRUE, TRUE, FALSE, NA))\n\n[1] 2 3\n\nwhich((11:15) &gt; 12)\n\n[1] 3 4 5\n\n\n\nidentical\n\n\nidentical(c(1, 2, 3), c(1, 2, NA))\n\n[1] FALSE\n\nidentical(c(1L, 2L, 3L), c(1, 2, 3))\n\n[1] FALSE"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-字符型",
    "href": "SD/1.2_R语言语法基础/index.html#运算-字符型",
    "title": "二、R语言语法基础",
    "section": "运算-字符型",
    "text": "运算-字符型\n\n特殊字符\n\n\nc(\"abc\", \"\", 'a cat', NA, '李明', \"\\n\")\n\n[1] \"abc\"   \"\"      \"a cat\" NA      \"李明\"  \"\\n\"   \n\n\n\npaste\n\n\n(users &lt;- paste(\"ruser\", 1:9))\n\n[1] \"ruser 1\" \"ruser 2\" \"ruser 3\" \"ruser 4\" \"ruser 5\" \"ruser 6\" \"ruser 7\"\n[8] \"ruser 8\" \"ruser 9\"\n\npaste(users, collapse = \", \")\n\n[1] \"ruser 1, ruser 2, ruser 3, ruser 4, ruser 5, ruser 6, ruser 7, ruser 8, ruser 9\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-字符型-1",
    "href": "SD/1.2_R语言语法基础/index.html#运算-字符型-1",
    "title": "二、R语言语法基础",
    "section": "运算-字符型",
    "text": "运算-字符型\n\n大小写\n\n\nletters[1:5]\n\n[1] \"a\" \"b\" \"c\" \"d\" \"e\"\n\ntoupper(letters[6:9])\n\n[1] \"F\" \"G\" \"H\" \"I\"\n\ntolower(month.abb)\n\n [1] \"jan\" \"feb\" \"mar\" \"apr\" \"may\" \"jun\" \"jul\" \"aug\" \"sep\" \"oct\" \"nov\" \"dec\"\n\nstringr::str_to_title(c(\"monday\", \"tuesday\"))\n\n[1] \"Monday\"  \"Tuesday\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-字符型-2",
    "href": "SD/1.2_R语言语法基础/index.html#运算-字符型-2",
    "title": "二、R语言语法基础",
    "section": "运算-字符型",
    "text": "运算-字符型\n\n字符串截取\n\n\nsubstr(\"Monday\", 1, 3)\n\n[1] \"Mon\"\n\nstringr::str_sub(\"Monday\", 1, 3)\n\n[1] \"Mon\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-字符型-3",
    "href": "SD/1.2_R语言语法基础/index.html#运算-字符型-3",
    "title": "二、R语言语法基础",
    "section": "运算-字符型",
    "text": "运算-字符型\n\n类型转换\n\n\n100\n\n[1] 100\n\nas.character(100)\n\n[1] \"100\"\n\nas.numeric(c(\"0100\", \"0101\"))\n\n[1] 100 101\n\nsprintf('renamedfile%03d.png', c(3, 99, 100))\n\n[1] \"renamedfile003.png\" \"renamedfile099.png\" \"renamedfile100.png\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#运算-字符型-4",
    "href": "SD/1.2_R语言语法基础/index.html#运算-字符型-4",
    "title": "二、R语言语法基础",
    "section": "运算-字符型",
    "text": "运算-字符型\n\n字符串替换\n\n\n(mystr &lt;- \"He was wrong!\")\n\n[1] \"He was wrong!\"\n\ngsub(\"wrong\", \"right\", mystr)\n\n[1] \"He was right!\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#索引",
    "href": "SD/1.2_R语言语法基础/index.html#索引",
    "title": "二、R语言语法基础",
    "section": "索引",
    "text": "索引\n向量\n\n# 创建一个向量\nvector &lt;- c(\"apple\", \"banana\", \"cherry\", \"date\")\n# 访问第三个元素\nvector[3]\n\n[1] \"cherry\"\n\n# 访问多个元素\nvector[c(2, 4)]\n\n[1] \"banana\" \"date\"  \n\nvector[c(2:4)]\n\n[1] \"banana\" \"cherry\" \"date\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#索引-1",
    "href": "SD/1.2_R语言语法基础/index.html#索引-1",
    "title": "二、R语言语法基础",
    "section": "索引",
    "text": "索引\n向量\n\n# 除了第2个元素\nvector[-2]\n\n[1] \"apple\"  \"cherry\" \"date\"  \n\n# 超界\nvector[100]\n\n[1] NA\n\n# 更新数据\nvector[7] &lt;- \"New Data\"\nvector\n\n[1] \"apple\"    \"banana\"   \"cherry\"   \"date\"     NA         NA         \"New Data\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#索引-2",
    "href": "SD/1.2_R语言语法基础/index.html#索引-2",
    "title": "二、R语言语法基础",
    "section": "索引",
    "text": "索引\n\n(x &lt;- 1:10)\n\n [1]  1  2  3  4  5  6  7  8  9 10\n\nx[x &gt; 6]\n\n[1]  7  8  9 10\n\nx[x &lt; 3] &lt;- 99\nx\n\n [1] 99 99  3  4  5  6  7  8  9 10\n\n# which\nwhich(x &gt; 10)\n\n[1] 1 2\n\nwhich.max(x)\n\n[1] 1\n\nwhich.min(x)\n\n[1] 3"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#索引-3",
    "href": "SD/1.2_R语言语法基础/index.html#索引-3",
    "title": "二、R语言语法基础",
    "section": "索引",
    "text": "索引\n列表\n\n# 创建一个列表\nmy_list &lt;- list(\n  fruit = c(\"apple\", \"banana\", \"cherry\"),\n  numbers = c(1, 2, 3, 4, 5)\n)\n\n# 访问列表中的第二个元素\nmy_list[[2]]\n\n[1] 1 2 3 4 5"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#索引-4",
    "href": "SD/1.2_R语言语法基础/index.html#索引-4",
    "title": "二、R语言语法基础",
    "section": "索引",
    "text": "索引\n数据框\n\n# 创建一个数据框\ndf &lt;- data.frame(fruit = c(\"apple\", \"banana\", \"cherry\"), quantity = c(5, 7, 3))\n\n# 访问数据框中的第一个元素\ndf[1, 1]\n\n[1] \"apple\"\n\n# 第2-3行\ndf[2:3, ]\n\n   fruit quantity\n2 banana        7\n3 cherry        3"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#日期和时间",
    "href": "SD/1.2_R语言语法基础/index.html#日期和时间",
    "title": "二、R语言语法基础",
    "section": "日期和时间",
    "text": "日期和时间\nbase package\n\nas.Date(\"2024-01-01\")\n\n[1] \"2024-01-01\"\n\nas.POSIXct(1)\n\n[1] \"1970-01-01 08:00:01 CST\"\n\nas.Date(c(\"12/6/2022\", \"1/1/2023\"), format = \"%m/%d/%Y\")\n\n[1] \"2022-12-06\" \"2023-01-01\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#日期和时间-1",
    "href": "SD/1.2_R语言语法基础/index.html#日期和时间-1",
    "title": "二、R语言语法基础",
    "section": "日期和时间",
    "text": "日期和时间\nlubridate package\n\nlubridate::today()\n\n[1] \"2026-05-21\"\n\nrequire(lubridate)\nnow()\n\n[1] \"2026-05-21 15:10:08 CST\"\n\nymd(c(20200321, 240404, \"20181231\"))\n\n[1] \"2020-03-21\" \"2024-04-04\" \"2018-12-31\"\n\nmdy(c(\"3-10-1998\", \"01-17-2018\", \"Feb 3, 2024\"))\n\n[1] \"1998-03-10\" \"2018-01-17\" \"2024-02-03\"\n\nymd_hms(\"1998-03-16 13:15:45\", tz = \"Asia/Shanghai\")\n\n[1] \"1998-03-16 13:15:45 CST\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#日期和时间-2",
    "href": "SD/1.2_R语言语法基础/index.html#日期和时间-2",
    "title": "二、R语言语法基础",
    "section": "日期和时间",
    "text": "日期和时间\nlubridate package\n\nmake_date(2028, 1, 30)\n\n[1] \"2028-01-30\"\n\nas_date(\"2000-01-01\")\n\n[1] \"2000-01-01\"\n\nas_datetime(\"2000-01-01\", tz = \"Asia/Shanghai\")\n\n[1] \"2000-01-01 CST\"\n\nas_datetime(\"2024-02-01 8:00:00\", tz = \"Asia/Shanghai\")\n\n[1] \"2024-02-01 08:00:00 CST\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#日期和时间-3",
    "href": "SD/1.2_R语言语法基础/index.html#日期和时间-3",
    "title": "二、R语言语法基础",
    "section": "日期和时间",
    "text": "日期和时间\nlubridate package\n\nyear(today())\n\n[1] 2026\n\nwday(today())\n\n[1] 5\n\nhour(now())\n\n[1] 15"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#日期和时间-4",
    "href": "SD/1.2_R语言语法基础/index.html#日期和时间-4",
    "title": "二、R语言语法基础",
    "section": "日期和时间",
    "text": "日期和时间\nlubridate package\n\n(x &lt;- now())\n\n[1] \"2026-05-21 15:10:08 CST\"\n\nfloor_date(x, unit = \"day\")\n\n[1] \"2026-05-21 CST\"\n\nfloor_date(x, unit = \"hour\")\n\n[1] \"2026-05-21 15:00:00 CST\"\n\nfloor_date(x, unit = \"10 minutes\")\n\n[1] \"2026-05-21 15:10:00 CST\"\n\nceiling_date(x, unit = \"10 minutes\")\n\n[1] \"2026-05-21 15:20:00 CST\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#因子factor",
    "href": "SD/1.2_R语言语法基础/index.html#因子factor",
    "title": "二、R语言语法基础",
    "section": "因子（factor）",
    "text": "因子（factor）\nFactor是什么？\n\n在R中，Factor是用来表示分类数据的特殊数据类型。\n它将数据分成不同的水平(levels)，每个水平代表了一个类别。"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#因子factor-1",
    "href": "SD/1.2_R语言语法基础/index.html#因子factor-1",
    "title": "二、R语言语法基础",
    "section": "因子（factor）",
    "text": "因子（factor）\n创建Factor\n\n# 创建一个Factor\ngender &lt;- factor(c(\"Male\", \"Female\", \"Female\", \"Male\"))\n# 查看Factor的水平\nlevels(gender)\n\n[1] \"Female\" \"Male\"  \n\n# 改变Factor的水平顺序\ngender &lt;- factor(gender, levels = c(\"Female\", \"Male\"))\nsummary(gender) # 使用Factor进行分组\n\nFemale   Male \n     2      2 \n\nas.numeric(gender) # 因子转换为纯粹的整数值\n\n[1] 2 1 1 2\n\nas.character(gender) # 转为字符\n\n[1] \"Male\"   \"Female\" \"Female\" \"Male\""
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#因子factor-2",
    "href": "SD/1.2_R语言语法基础/index.html#因子factor-2",
    "title": "二、R语言语法基础",
    "section": "因子（factor）",
    "text": "因子（factor）\nLabel of Factor\n\n(x &lt;- factor(1:12, label = month.abb))\n\n [1] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\nLevels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\n\nfactor(x, levels = month.abb[c(2:12, 1)])\n\n [1] Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\nLevels: Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan\n\n\n分组\n\ncut(1:20, breaks = c(0, 5, 10, 15, 18, 20))\n\n [1] (0,5]   (0,5]   (0,5]   (0,5]   (0,5]   (5,10]  (5,10]  (5,10]  (5,10] \n[10] (5,10]  (10,15] (10,15] (10,15] (10,15] (10,15] (15,18] (15,18] (15,18]\n[19] (18,20] (18,20]\nLevels: (0,5] (5,10] (10,15] (15,18] (18,20]"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#矩阵",
    "href": "SD/1.2_R语言语法基础/index.html#矩阵",
    "title": "二、R语言语法基础",
    "section": "矩阵",
    "text": "矩阵\n\n1:20\n\n [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20\n\n(A &lt;- matrix(1:20, nrow = 4, byrow = TRUE))\n\n     [,1] [,2] [,3] [,4] [,5]\n[1,]    1    2    3    4    5\n[2,]    6    7    8    9   10\n[3,]   11   12   13   14   15\n[4,]   16   17   18   19   20\n\n(B &lt;- matrix(1:20, nrow = 4, byrow = FALSE))\n\n     [,1] [,2] [,3] [,4] [,5]\n[1,]    1    5    9   13   17\n[2,]    2    6   10   14   18\n[3,]    3    7   11   15   19\n[4,]    4    8   12   16   20\n\nnrow(A)\n\n[1] 4\n\nncol(B)\n\n[1] 5"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#矩阵-1",
    "href": "SD/1.2_R语言语法基础/index.html#矩阵-1",
    "title": "二、R语言语法基础",
    "section": "矩阵",
    "text": "矩阵\n高维矩阵\n\nX &lt;- array(1:12, dim = c(3, 2, 2))\ndim(C)\n\nNULL\n\nX[1, , ]\n\n     [,1] [,2]\n[1,]    1    7\n[2,]    4   10\n\nX[1, , 1]\n\n[1] 1 4"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#矩阵-2",
    "href": "SD/1.2_R语言语法基础/index.html#矩阵-2",
    "title": "二、R语言语法基础",
    "section": "矩阵",
    "text": "矩阵\ncbind、rbind\n\ncbind(X[1, , ], X[2, , ], X[3, , ])\n\n     [,1] [,2] [,3] [,4] [,5] [,6]\n[1,]    1    7    2    8    3    9\n[2,]    4   10    5   11    6   12\n\nrbind(X[1, , ], X[2, , ], X[3, , ])\n\n     [,1] [,2]\n[1,]    1    7\n[2,]    4   10\n[3,]    2    8\n[4,]    5   11\n[5,]    3    9\n[6,]    6   12\n\ncbind(c(1, 2), c(3, 4), c(5, 6))\n\n     [,1] [,2] [,3]\n[1,]    1    3    5\n[2,]    2    4    6"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数据框data-frame",
    "href": "SD/1.2_R语言语法基础/index.html#数据框data-frame",
    "title": "二、R语言语法基础",
    "section": "数据框（data frame）",
    "text": "数据框（data frame）\n最主要的数据形式。\n\n# 创建数据框\n(df &lt;- data.frame(\n  Name = c(\"Alice\", \"Bob\", \"Charlie\"),\n  Age = c(25, 30, 35),\n  Married = c(TRUE, FALSE, TRUE)\n))\n\n     Name Age Married\n1   Alice  25    TRUE\n2     Bob  30   FALSE\n3 Charlie  35    TRUE\n\nnames(df)\n\n[1] \"Name\"    \"Age\"     \"Married\"\n\ncolnames(df)\n\n[1] \"Name\"    \"Age\"     \"Married\"\n\nncol(df)\n\n[1] 3\n\nnrow(df)\n\n[1] 3"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数据框data-frame-1",
    "href": "SD/1.2_R语言语法基础/index.html#数据框data-frame-1",
    "title": "二、R语言语法基础",
    "section": "数据框（data frame）",
    "text": "数据框（data frame）\n\ndf[1, 1]\n\n[1] \"Alice\"\n\ndf[2, ]\n\n  Name Age Married\n2  Bob  30   FALSE\n\ndf[, 1]\n\n[1] \"Alice\"   \"Bob\"     \"Charlie\"\n\ndf$Age\n\n[1] 25 30 35\n\ndf[[\"Age\"]]\n\n[1] 25 30 35\n\ndf[, \"Age\"]\n\n[1] 25 30 35"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#数据框data-frame-2",
    "href": "SD/1.2_R语言语法基础/index.html#数据框data-frame-2",
    "title": "二、R语言语法基础",
    "section": "数据框（data frame）",
    "text": "数据框（data frame）\n\nX &lt;- matrix(1:9, nrow = 3)\nclass(X)\n\n[1] \"matrix\" \"array\" \n\n(Y &lt;- as.data.frame(X))\n\n  V1 V2 V3\n1  1  4  7\n2  2  5  8\n3  3  6  9\n\nnames(Y)\n\n[1] \"V1\" \"V2\" \"V3\"\n\nnames(Y) &lt;- c(\"colA\", \"colB\", \"colC\")"
  },
  {
    "objectID": "SD/1.2_R语言语法基础/index.html#欢迎讨论",
    "href": "SD/1.2_R语言语法基础/index.html#欢迎讨论",
    "title": "二、R语言语法基础",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/1.9_课后作业6/index.html#第6次课后作业",
    "href": "SD/1.9_课后作业6/index.html#第6次课后作业",
    "title": "课后作业6",
    "section": "第6次课后作业",
    "text": "第6次课后作业\n\n如何在 R 中将数字 10 赋值给变量 x？\n在 R 中，如何创建一个包含数字 1 到 5 的向量？\n编写一个条件语句，如果变量 age 大于等于 18，则打印 “成年人”，否则打印 “未成年人”。\n使用 for 循环打印从 1 到 10 的整数。\n编写一个名为 addition 的函数，接受两个参数 a 和 b，返回它们的和。\n创建一个列表，包含三个元素：一个数字向量、一个字符向量和一个逻辑向量。\n使用 read.csv() 函数读取名为 data.csv 的 CSV 文件，并将数据存储在一个名为 data 的数据框中。\n从数据框中选择前五行，并将结果存储在一个新的数据框中。\n将字符串 “hello world” 转换为大写。\n从数据框中选择 score 列大于等于 90 的行。"
  },
  {
    "objectID": "SD/1.9_课后作业6/index.html#data.csv内容",
    "href": "SD/1.9_课后作业6/index.html#data.csv内容",
    "title": "课后作业6",
    "section": "data.csv内容",
    "text": "data.csv内容\nname,age,score\nAlice,25,85\nBob,30,92\nCharlie,28,89\nDavid,22,95\nEva,35,87\nFrank,27,91\nGrace,29,88\nHelen,26,93\nIvan,31,86\nJack,24,94\nKelly,32,89\nLily,28,90\nMike,33,85\nNancy,27,92\nOlivia,34,88\nPeter,29,93\nQueen,25,89\nRyan,30,94\nSamantha,26,91\nTom,31,87"
  },
  {
    "objectID": "SD/1.9_课后作业6/index.html#欢迎讨论",
    "href": "SD/1.9_课后作业6/index.html#欢迎讨论",
    "title": "课后作业6",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#tidyverse风格数据分析总体流程",
    "href": "SD/2.2_dataimport/index.html#tidyverse风格数据分析总体流程",
    "title": "Data import",
    "section": "tidyverse风格数据分析总体流程",
    "text": "tidyverse风格数据分析总体流程"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#导入csv数据",
    "href": "SD/2.2_dataimport/index.html#导入csv数据",
    "title": "Data import",
    "section": "导入csv数据",
    "text": "导入csv数据\n\nread_lines(\"../../data/students.csv\") |&gt; cat(sep = \"\\n\")\n\nStudent ID,Full Name,favourite.food,mealPlan,AGE\n1,Sunil Huffmann,Strawberry yoghurt,Lunch only,4\n2,Barclay Lynn,French fries,Lunch only,5\n3,Jayendra Lyne,N/A,Breakfast and lunch,7\n4,Leon Rossini,Anchovies,Lunch only,\n5,Chidiegwu Dunkel,Pizza,Breakfast and lunch,five\n6,Güvenç Attila,Ice cream,Lunch only,6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#导入csv数据-1",
    "href": "SD/2.2_dataimport/index.html#导入csv数据-1",
    "title": "Data import",
    "section": "导入csv数据",
    "text": "导入csv数据\n\nread_csv(\"../../data/students.csv\") |&gt;\n  knitr::kable()\n\n\n\n\n\n\n\n\n\n\n\nStudent ID\nFull Name\nfavourite.food\nmealPlan\nAGE\n\n\n\n\n1\nSunil Huffmann\nStrawberry yoghurt\nLunch only\n4\n\n\n2\nBarclay Lynn\nFrench fries\nLunch only\n5\n\n\n3\nJayendra Lyne\nN/A\nBreakfast and lunch\n7\n\n\n4\nLeon Rossini\nAnchovies\nLunch only\nNA\n\n\n5\nChidiegwu Dunkel\nPizza\nBreakfast and lunch\nfive\n\n\n6\nGüvenç Attila\nIce cream\nLunch only\n6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#读取数据",
    "href": "SD/2.2_dataimport/index.html#读取数据",
    "title": "Data import",
    "section": "读取数据",
    "text": "读取数据\n\n(students &lt;- read_csv(\"../../data/students.csv\"))\n\n# A tibble: 6 × 5\n  `Student ID` `Full Name`      favourite.food     mealPlan            AGE  \n         &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;chr&gt;               &lt;chr&gt;\n1            1 Sunil Huffmann   Strawberry yoghurt Lunch only          4    \n2            2 Barclay Lynn     French fries       Lunch only          5    \n3            3 Jayendra Lyne    N/A                Breakfast and lunch 7    \n4            4 Leon Rossini     Anchovies          Lunch only          &lt;NA&gt; \n5            5 Chidiegwu Dunkel Pizza              Breakfast and lunch five \n6            6 Güvenç Attila    Ice cream          Lunch only          6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#读取数据-1",
    "href": "SD/2.2_dataimport/index.html#读取数据-1",
    "title": "Data import",
    "section": "读取数据",
    "text": "读取数据\n\n(students &lt;- read_csv(\"../../data/students.csv\", na = c(\"N/A\", \"\")))\n\n# A tibble: 6 × 5\n  `Student ID` `Full Name`      favourite.food     mealPlan            AGE  \n         &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;chr&gt;               &lt;chr&gt;\n1            1 Sunil Huffmann   Strawberry yoghurt Lunch only          4    \n2            2 Barclay Lynn     French fries       Lunch only          5    \n3            3 Jayendra Lyne    &lt;NA&gt;               Breakfast and lunch 7    \n4            4 Leon Rossini     Anchovies          Lunch only          &lt;NA&gt; \n5            5 Chidiegwu Dunkel Pizza              Breakfast and lunch five \n6            6 Güvenç Attila    Ice cream          Lunch only          6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#列名不要有空格",
    "href": "SD/2.2_dataimport/index.html#列名不要有空格",
    "title": "Data import",
    "section": "列名不要有空格",
    "text": "列名不要有空格\n\nstudents |&gt;\n  rename(\n    student_id = `Student ID`,\n    full_name = `Full Name`\n  )\n\n# A tibble: 6 × 5\n  student_id full_name        favourite.food     mealPlan            AGE  \n       &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;chr&gt;               &lt;chr&gt;\n1          1 Sunil Huffmann   Strawberry yoghurt Lunch only          4    \n2          2 Barclay Lynn     French fries       Lunch only          5    \n3          3 Jayendra Lyne    &lt;NA&gt;               Breakfast and lunch 7    \n4          4 Leon Rossini     Anchovies          Lunch only          &lt;NA&gt; \n5          5 Chidiegwu Dunkel Pizza              Breakfast and lunch five \n6          6 Güvenç Attila    Ice cream          Lunch only          6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#janitor处理空格",
    "href": "SD/2.2_dataimport/index.html#janitor处理空格",
    "title": "Data import",
    "section": "janitor处理空格",
    "text": "janitor处理空格\n\nstudents |&gt; janitor::clean_names()\n\n# A tibble: 6 × 5\n  student_id full_name        favourite_food     meal_plan           age  \n       &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;chr&gt;               &lt;chr&gt;\n1          1 Sunil Huffmann   Strawberry yoghurt Lunch only          4    \n2          2 Barclay Lynn     French fries       Lunch only          5    \n3          3 Jayendra Lyne    &lt;NA&gt;               Breakfast and lunch 7    \n4          4 Leon Rossini     Anchovies          Lunch only          &lt;NA&gt; \n5          5 Chidiegwu Dunkel Pizza              Breakfast and lunch five \n6          6 Güvenç Attila    Ice cream          Lunch only          6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#janitor处理空格-1",
    "href": "SD/2.2_dataimport/index.html#janitor处理空格-1",
    "title": "Data import",
    "section": "janitor处理空格",
    "text": "janitor处理空格\n\nstudents |&gt;\n  janitor::clean_names() |&gt;\n  mutate(meal_plan = factor(meal_plan))\n\n# A tibble: 6 × 5\n  student_id full_name        favourite_food     meal_plan           age  \n       &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;fct&gt;               &lt;chr&gt;\n1          1 Sunil Huffmann   Strawberry yoghurt Lunch only          4    \n2          2 Barclay Lynn     French fries       Lunch only          5    \n3          3 Jayendra Lyne    &lt;NA&gt;               Breakfast and lunch 7    \n4          4 Leon Rossini     Anchovies          Lunch only          &lt;NA&gt; \n5          5 Chidiegwu Dunkel Pizza              Breakfast and lunch five \n6          6 Güvenç Attila    Ice cream          Lunch only          6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#janitor处理空格-2",
    "href": "SD/2.2_dataimport/index.html#janitor处理空格-2",
    "title": "Data import",
    "section": "janitor处理空格",
    "text": "janitor处理空格\n\nstudents &lt;- students |&gt;\n  janitor::clean_names() |&gt;\n  mutate(\n    meal_plan = factor(meal_plan),\n    age = parse_number(if_else(age == \"five\", \"5\", age))\n  )\nstudents\n\n# A tibble: 6 × 5\n  student_id full_name        favourite_food     meal_plan             age\n       &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;fct&gt;               &lt;dbl&gt;\n1          1 Sunil Huffmann   Strawberry yoghurt Lunch only              4\n2          2 Barclay Lynn     French fries       Lunch only              5\n3          3 Jayendra Lyne    &lt;NA&gt;               Breakfast and lunch     7\n4          4 Leon Rossini     Anchovies          Lunch only             NA\n5          5 Chidiegwu Dunkel Pizza              Breakfast and lunch     5\n6          6 Güvenç Attila    Ice cream          Lunch only              6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#直接录入",
    "href": "SD/2.2_dataimport/index.html#直接录入",
    "title": "Data import",
    "section": "直接录入",
    "text": "直接录入\n\nread_csv(\n  \"The first line of metadata\n  The second line of metadata\n  x,y,z\n  1,2,3\",\n  skip = 2\n)\n\n# A tibble: 1 × 3\n      x     y     z\n  &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\n1     1     2     3"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#直接录入-1",
    "href": "SD/2.2_dataimport/index.html#直接录入-1",
    "title": "Data import",
    "section": "直接录入",
    "text": "直接录入\n\nread_csv(\n  \"# A comment I want to skip\n  x,y,z\n  1,2,3\",\n  comment = \"#\"\n)\n\n# A tibble: 1 × 3\n      x     y     z\n  &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\n1     1     2     3"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#指定列名",
    "href": "SD/2.2_dataimport/index.html#指定列名",
    "title": "Data import",
    "section": "指定列名",
    "text": "指定列名\n\nread_csv(\n  \"1,2,3\n  4,5,6\",\n  col_names = c(\"x\", \"y\", \"z\")\n)\n\n# A tibble: 2 × 3\n      x     y     z\n  &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\n1     1     2     3\n2     4     5     6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#指定列的类型",
    "href": "SD/2.2_dataimport/index.html#指定列的类型",
    "title": "Data import",
    "section": "指定列的类型",
    "text": "指定列的类型\n\nanother_csv &lt;- \"\nx,y,z\n1,2,3\"\n\nread_csv(\n  another_csv,\n  col_types = cols(.default = col_character())\n)\n\n# A tibble: 1 × 3\n  x     y     z    \n  &lt;chr&gt; &lt;chr&gt; &lt;chr&gt;\n1 1     2     3    \n\nread_csv(\n  another_csv,\n  col_types = cols_only(x = col_character())\n)\n\n# A tibble: 1 × 1\n  x    \n  &lt;chr&gt;\n1 1"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#练习",
    "href": "SD/2.2_dataimport/index.html#练习",
    "title": "Data import",
    "section": "练习",
    "text": "练习\n\nread_csv(\"a,b\\n1,2,3\\n4,5,6\")\nread_csv(\"a,b,c\\n1,2\\n1,2,3,4\")\nread_csv(\"a,b\\n\\\"1\")\nread_csv(\"a,b\\n1,2\\na,b\")\nread_csv(\"a;b\\n1;3\")"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#练习-1",
    "href": "SD/2.2_dataimport/index.html#练习-1",
    "title": "Data import",
    "section": "练习",
    "text": "练习\n\nannoying &lt;- tibble(\n  `1` = 1:10,\n  `2` = `1` * 2 + rnorm(length(`1`))\n)"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#批量读取",
    "href": "SD/2.2_dataimport/index.html#批量读取",
    "title": "Data import",
    "section": "批量读取",
    "text": "批量读取\n\nsales_files &lt;- c(\n  \"../../data/01-sales.csv\",\n  \"../../data/02-sales.csv\",\n  \"../../data/03-sales.csv\"\n)\nread_csv(sales_files, id = \"file\")\n\n# A tibble: 19 × 6\n   file                    month     year brand  item     n\n   &lt;chr&gt;                   &lt;chr&gt;    &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\n 1 ../../data/01-sales.csv January   2019     1  1234     3\n 2 ../../data/01-sales.csv January   2019     1  8721     9\n 3 ../../data/01-sales.csv January   2019     1  1822     2\n 4 ../../data/01-sales.csv January   2019     2  3333     1\n 5 ../../data/01-sales.csv January   2019     2  2156     9\n 6 ../../data/01-sales.csv January   2019     2  3987     6\n 7 ../../data/01-sales.csv January   2019     2  3827     6\n 8 ../../data/02-sales.csv February  2019     1  1234     8\n 9 ../../data/02-sales.csv February  2019     1  8721     2\n10 ../../data/02-sales.csv February  2019     1  1822     3\n11 ../../data/02-sales.csv February  2019     2  3333     1\n12 ../../data/02-sales.csv February  2019     2  2156     3\n13 ../../data/02-sales.csv February  2019     2  3987     6\n14 ../../data/03-sales.csv March     2019     1  1234     3\n15 ../../data/03-sales.csv March     2019     1  3627     1\n16 ../../data/03-sales.csv March     2019     1  8820     3\n17 ../../data/03-sales.csv March     2019     2  7253     1\n18 ../../data/03-sales.csv March     2019     2  8766     3\n19 ../../data/03-sales.csv March     2019     2  8288     6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#读取excel建议用readxl包",
    "href": "SD/2.2_dataimport/index.html#读取excel建议用readxl包",
    "title": "Data import",
    "section": "读取Excel，建议用readxl包",
    "text": "读取Excel，建议用readxl包\n\n(surveydf &lt;- readxl::read_xlsx(\"../../data/survey.xlsx\"))\n\n# A tibble: 6 × 2\n  survey_id n_pets\n      &lt;dbl&gt; &lt;chr&gt; \n1         1 0     \n2         2 1     \n3         3 N/A   \n4         4 two   \n5         5 2     \n6         6 &lt;NA&gt;"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#读取excel",
    "href": "SD/2.2_dataimport/index.html#读取excel",
    "title": "Data import",
    "section": "读取Excel",
    "text": "读取Excel\n\n(airqualitydf &lt;- readxl::read_xlsx(\"../../data/airquality.xlsx\", sheet = 2))\n\n# A tibble: 20,088 × 20\n   datetime            site  `CO_mg/m3` `CO_24h_mg/m3` `NO2_μg/m3`\n   &lt;dttm&gt;              &lt;chr&gt;      &lt;dbl&gt;          &lt;dbl&gt;       &lt;dbl&gt;\n 1 2024-03-19 01:00:00 1001A        0.1            0.4           5\n 2 2024-03-19 01:00:00 1003A        0.2            0.4           9\n 3 2024-03-19 01:00:00 1004A        0.2            0.4           4\n 4 2024-03-19 01:00:00 1005A        0.1            0.3           6\n 5 2024-03-19 01:00:00 1006A        0.1            0.4           5\n 6 2024-03-19 01:00:00 1007A        0.3            0.5           6\n 7 2024-03-19 01:00:00 1008A        0.2            0.4           2\n 8 2024-03-19 01:00:00 1009A        0.2            0.4           2\n 9 2024-03-19 01:00:00 1010A        0.1            0.3           2\n10 2024-03-19 01:00:00 1011A        0.2            0.4          12\n# ℹ 20,078 more rows\n# ℹ 15 more variables: `NO2_24h_μg/m3` &lt;dbl&gt;, `O3_μg/m3` &lt;dbl&gt;,\n#   `O3_24h_μg/m3` &lt;lgl&gt;, `O3_8h_μg/m3` &lt;lgl&gt;, `O3_8h_24h_μg/m3` &lt;lgl&gt;,\n#   `PM10_μg/m3` &lt;dbl&gt;, `PM10_24h_μg/m3` &lt;dbl&gt;, `PM2.5_μg/m3` &lt;dbl&gt;,\n#   `PM2.5_24h_μg/m3` &lt;dbl&gt;, `SO2_μg/m3` &lt;dbl&gt;, `SO2_24h_μg/m3` &lt;dbl&gt;,\n#   AQI &lt;dbl&gt;, PrimaryPollutant &lt;chr&gt;, Quality &lt;chr&gt;, Unheathful &lt;chr&gt;"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#批量读取-1",
    "href": "SD/2.2_dataimport/index.html#批量读取-1",
    "title": "Data import",
    "section": "批量读取",
    "text": "批量读取\n\nsales_files &lt;- list.files(\n  \"../../data\",\n  pattern = \"sales\\\\.csv$\",\n  full.names = TRUE\n)\nsales_files\n\n[1] \"../../data/01-sales.csv\" \"../../data/02-sales.csv\"\n[3] \"../../data/03-sales.csv\""
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#写入csv",
    "href": "SD/2.2_dataimport/index.html#写入csv",
    "title": "Data import",
    "section": "写入csv",
    "text": "写入csv\n\nstudents\n\n# A tibble: 6 × 5\n  student_id full_name        favourite_food     meal_plan             age\n       &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;fct&gt;               &lt;dbl&gt;\n1          1 Sunil Huffmann   Strawberry yoghurt Lunch only              4\n2          2 Barclay Lynn     French fries       Lunch only              5\n3          3 Jayendra Lyne    &lt;NA&gt;               Breakfast and lunch     7\n4          4 Leon Rossini     Anchovies          Lunch only             NA\n5          5 Chidiegwu Dunkel Pizza              Breakfast and lunch     5\n6          6 Güvenç Attila    Ice cream          Lunch only              6\n\nwrite_csv(students, \"students-2.csv\")\nread_csv(\"students-2.csv\")\n\n# A tibble: 6 × 5\n  student_id full_name        favourite_food     meal_plan             age\n       &lt;dbl&gt; &lt;chr&gt;            &lt;chr&gt;              &lt;chr&gt;               &lt;dbl&gt;\n1          1 Sunil Huffmann   Strawberry yoghurt Lunch only              4\n2          2 Barclay Lynn     French fries       Lunch only              5\n3          3 Jayendra Lyne    &lt;NA&gt;               Breakfast and lunch     7\n4          4 Leon Rossini     Anchovies          Lunch only             NA\n5          5 Chidiegwu Dunkel Pizza              Breakfast and lunch     5\n6          6 Güvenç Attila    Ice cream          Lunch only              6"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#写入excel",
    "href": "SD/2.2_dataimport/index.html#写入excel",
    "title": "Data import",
    "section": "写入Excel",
    "text": "写入Excel\n\nwritexl::write_xlsx(students, \"../../data/writexldemo.xlsx\")"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#读取数据库以mysql为例",
    "href": "SD/2.2_dataimport/index.html#读取数据库以mysql为例",
    "title": "Data import",
    "section": "读取数据库，以MySQL为例",
    "text": "读取数据库，以MySQL为例\n\nif (FALSE) {\n  conn &lt;- cctdb::get_dbconn(\"nationalairquality\")\n  DBI::dbListTables(conn)\n}"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#读取数据库以mysql为例-1",
    "href": "SD/2.2_dataimport/index.html#读取数据库以mysql为例-1",
    "title": "Data import",
    "section": "读取数据库，以MySQL为例",
    "text": "读取数据库，以MySQL为例\n\nif (FALSE) {\n  conn &lt;- cctdb::get_dbconn(\"nationalairquality\")\n  metadf &lt;- tbl(conn, \"metadf\") |&gt;\n    head(100) |&gt;\n    collect()\n  DBI::dbDisconnect(conn)\n  saveRDS(metadf, file = \"../../data/metadfdemo.RDS\")\n}\nmetadf &lt;- readRDS(file = \"../../data/metadfdemo.RDS\")\nlang &lt;- \"cn\"\nmetadf |&gt;\n  ggplot(aes(lon, lat)) +\n  geom_point(aes(fill = Area)) +\n  dwfun::theme_sci()"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#练习-2",
    "href": "SD/2.2_dataimport/index.html#练习-2",
    "title": "Data import",
    "section": "练习",
    "text": "练习\n\nmetadf &lt;- readxl::read_xlsx(\"../../data/airquality.xlsx\")\ndir.create(\"../../data/metacity2/\")\nmetadf |&gt;\n  nest(sitedf = -site) |&gt;\n  mutate(\n    flag = purrr::map2(\n      site,\n      sitedf,\n      ~ writexl::write_xlsx(.y, paste0(\"../../data/metacity2/\", .x, \".xlsx\"))\n    )\n  )"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#练习-3",
    "href": "SD/2.2_dataimport/index.html#练习-3",
    "title": "Data import",
    "section": "练习",
    "text": "练习\n\n从“../../data/sales.xlsx”读取第9到13行的数据\n从“../../data/meta_city.xlsx”读取所有的数据，并保存至“../../data/meta_city_onetable1.xlsx”\n从“../../data/metacity/”读取所有的数据，并保存至“../../data/meta_city_onetable2.xlsx”"
  },
  {
    "objectID": "SD/2.2_dataimport/index.html#欢迎讨论",
    "href": "SD/2.2_dataimport/index.html#欢迎讨论",
    "title": "Data import",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#计数",
    "href": "SD/3.1_datatransform/index.html#计数",
    "title": "Data Transform",
    "section": "计数",
    "text": "计数\n\nflights |&gt;\n  count(origin, dest, sort = TRUE)\n\n# A tibble: 224 × 3\n   origin dest      n\n   &lt;chr&gt;  &lt;chr&gt; &lt;int&gt;\n 1 JFK    LAX   11262\n 2 LGA    ATL   10263\n 3 LGA    ORD    8857\n 4 JFK    SFO    8204\n 5 LGA    CLT    6168\n 6 EWR    ORD    6100\n 7 JFK    BOS    5898\n 8 LGA    MIA    5781\n 9 JFK    MCO    5464\n10 EWR    BOS    5327\n# ℹ 214 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#计数-练习",
    "href": "SD/3.1_datatransform/index.html#计数-练习",
    "title": "Data Transform",
    "section": "计数-练习",
    "text": "计数-练习\n统计每月的航班数量。\n\n\n# A tibble: 12 × 3\n    year month     n\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;\n 1  2013     7 29425\n 2  2013     8 29327\n 3  2013    10 28889\n 4  2013     3 28834\n 5  2013     5 28796\n 6  2013     4 28330\n 7  2013     6 28243\n 8  2013    12 28135\n 9  2013     9 27574\n10  2013    11 27268\n11  2013     1 27004\n12  2013     2 24951"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#计算新变量",
    "href": "SD/3.1_datatransform/index.html#计算新变量",
    "title": "Data Transform",
    "section": "计算新变量",
    "text": "计算新变量\n\nflights |&gt;\n  mutate(\n    gain = dep_delay - arr_delay,\n    speed = distance / air_time * 60\n  )\n\n# A tibble: 336,776 × 21\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 13 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;, gain &lt;dbl&gt;, speed &lt;dbl&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#计算新变量-1",
    "href": "SD/3.1_datatransform/index.html#计算新变量-1",
    "title": "Data Transform",
    "section": "计算新变量",
    "text": "计算新变量\n\nflights |&gt;\n  mutate(\n    gain = dep_delay - arr_delay,\n    speed = distance / air_time * 60,\n    .before = 1\n  )\n\n# A tibble: 336,776 × 21\n    gain speed  year month   day dep_time sched_dep_time dep_delay arr_time\n   &lt;dbl&gt; &lt;dbl&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n 1    -9  370.  2013     1     1      517            515         2      830\n 2   -16  374.  2013     1     1      533            529         4      850\n 3   -31  408.  2013     1     1      542            540         2      923\n 4    17  517.  2013     1     1      544            545        -1     1004\n 5    19  394.  2013     1     1      554            600        -6      812\n 6   -16  288.  2013     1     1      554            558        -4      740\n 7   -24  404.  2013     1     1      555            600        -5      913\n 8    11  259.  2013     1     1      557            600        -3      709\n 9     5  405.  2013     1     1      557            600        -3      838\n10   -10  319.  2013     1     1      558            600        -2      753\n# ℹ 336,766 more rows\n# ℹ 12 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;,\n#   flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;,\n#   distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#计算新变量-2",
    "href": "SD/3.1_datatransform/index.html#计算新变量-2",
    "title": "Data Transform",
    "section": "计算新变量",
    "text": "计算新变量\n\nflights |&gt;\n  mutate(\n    gain = dep_delay - arr_delay,\n    speed = distance / air_time * 60,\n    .after = day\n  )\n\n# A tibble: 336,776 × 21\n    year month   day  gain speed dep_time sched_dep_time dep_delay arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt; &lt;dbl&gt; &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n 1  2013     1     1    -9  370.      517            515         2      830\n 2  2013     1     1   -16  374.      533            529         4      850\n 3  2013     1     1   -31  408.      542            540         2      923\n 4  2013     1     1    17  517.      544            545        -1     1004\n 5  2013     1     1    19  394.      554            600        -6      812\n 6  2013     1     1   -16  288.      554            558        -4      740\n 7  2013     1     1   -24  404.      555            600        -5      913\n 8  2013     1     1    11  259.      557            600        -3      709\n 9  2013     1     1     5  405.      557            600        -3      838\n10  2013     1     1   -10  319.      558            600        -2      753\n# ℹ 336,766 more rows\n# ℹ 12 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;,\n#   flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;,\n#   distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#计算新变量-3",
    "href": "SD/3.1_datatransform/index.html#计算新变量-3",
    "title": "Data Transform",
    "section": "计算新变量",
    "text": "计算新变量\n\nflights |&gt;\n  mutate(\n    gain = dep_delay - arr_delay,\n    hours = air_time / 60,\n    gain_per_hour = gain / hours,\n    .keep = \"used\"\n  )\n\n# A tibble: 336,776 × 6\n   dep_delay arr_delay air_time  gain hours gain_per_hour\n       &lt;dbl&gt;     &lt;dbl&gt;    &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;         &lt;dbl&gt;\n 1         2        11      227    -9 3.78          -2.38\n 2         4        20      227   -16 3.78          -4.23\n 3         2        33      160   -31 2.67         -11.6 \n 4        -1       -18      183    17 3.05           5.57\n 5        -6       -25      116    19 1.93           9.83\n 6        -4        12      150   -16 2.5           -6.4 \n 7        -5        19      158   -24 2.63          -9.11\n 8        -3       -14       53    11 0.883         12.5 \n 9        -3        -8      140     5 2.33           2.14\n10        -2         8      138   -10 2.3           -4.35\n# ℹ 336,766 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#列排序",
    "href": "SD/3.1_datatransform/index.html#列排序",
    "title": "Data Transform",
    "section": "列排序",
    "text": "列排序\n\nflights |&gt;\n  relocate(time_hour, air_time)\n\n# A tibble: 336,776 × 19\n   time_hour           air_time  year month   day dep_time sched_dep_time\n   &lt;dttm&gt;                 &lt;dbl&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;\n 1 2013-01-01 05:00:00      227  2013     1     1      517            515\n 2 2013-01-01 05:00:00      227  2013     1     1      533            529\n 3 2013-01-01 05:00:00      160  2013     1     1      542            540\n 4 2013-01-01 05:00:00      183  2013     1     1      544            545\n 5 2013-01-01 06:00:00      116  2013     1     1      554            600\n 6 2013-01-01 05:00:00      150  2013     1     1      554            558\n 7 2013-01-01 06:00:00      158  2013     1     1      555            600\n 8 2013-01-01 06:00:00       53  2013     1     1      557            600\n 9 2013-01-01 06:00:00      140  2013     1     1      557            600\n10 2013-01-01 06:00:00      138  2013     1     1      558            600\n# ℹ 336,766 more rows\n# ℹ 12 more variables: dep_delay &lt;dbl&gt;, arr_time &lt;int&gt;, sched_arr_time &lt;int&gt;,\n#   arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;,\n#   dest &lt;chr&gt;, distance &lt;dbl&gt;, hour &lt;dbl&gt;, minute &lt;dbl&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#列排序-1",
    "href": "SD/3.1_datatransform/index.html#列排序-1",
    "title": "Data Transform",
    "section": "列排序",
    "text": "列排序\n\nflights |&gt;\n  relocate(year:dep_time, .after = time_hour)\nflights |&gt;\n  relocate(starts_with(\"arr\"), .before = dep_time)\nflights |&gt;\n  select(starts_with(\"arr\"), everything())"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习",
    "href": "SD/3.1_datatransform/index.html#练习",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n计算目的地为IAH，按飞行速度排序的表格，保留year:day, dep_time, carrier, flight与speed列。\n\nflights |&gt;\n  filter(dest == \"IAH\") |&gt;\n  mutate(speed = distance / air_time * 60) |&gt;\n  select(year:day, dep_time, carrier, flight, speed) |&gt;\n  arrange(desc(speed))\n\n# A tibble: 7,198 × 7\n    year month   day dep_time carrier flight speed\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt; &lt;chr&gt;    &lt;int&gt; &lt;dbl&gt;\n 1  2013     7     9      707 UA         226  522.\n 2  2013     8    27     1850 UA        1128  521.\n 3  2013     8    28      902 UA        1711  519.\n 4  2013     8    28     2122 UA        1022  519.\n 5  2013     6    11     1628 UA        1178  515.\n 6  2013     8    27     1017 UA         333  515.\n 7  2013     8    27     1205 UA        1421  515.\n 8  2013     8    27     1758 UA         302  515.\n 9  2013     9    27      521 UA         252  515.\n10  2013     8    28      625 UA         559  515.\n# ℹ 7,188 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-1",
    "href": "SD/3.1_datatransform/index.html#练习-1",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n计算目的地为IAH，按飞行速度排序的表格，保留year:day, dep_time, carrier, flight与speed列。\n\nflights1 &lt;- filter(flights, dest == \"IAH\")\nflights2 &lt;- mutate(flights1, speed = distance / air_time * 60)\nflights3 &lt;- select(flights2, year:day, dep_time, carrier, flight, speed)\narrange(flights3, desc(speed))"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-2",
    "href": "SD/3.1_datatransform/index.html#练习-2",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n计算目的地为IAH，按飞行速度排序的表格，保留year:day, dep_time, carrier, flight与speed列。\n\nflights |&gt;\n  filter(dest == \"IAH\") |&gt;\n  mutate(speed = distance / air_time * 60) |&gt;\n  select(year:day, dep_time, carrier, flight, speed) |&gt;\n  arrange(desc(speed))\n\n# A tibble: 7,198 × 7\n    year month   day dep_time carrier flight speed\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt; &lt;chr&gt;    &lt;int&gt; &lt;dbl&gt;\n 1  2013     7     9      707 UA         226  522.\n 2  2013     8    27     1850 UA        1128  521.\n 3  2013     8    28      902 UA        1711  519.\n 4  2013     8    28     2122 UA        1022  519.\n 5  2013     6    11     1628 UA        1178  515.\n 6  2013     8    27     1017 UA         333  515.\n 7  2013     8    27     1205 UA        1421  515.\n 8  2013     8    27     1758 UA         302  515.\n 9  2013     9    27      521 UA         252  515.\n10  2013     8    28      625 UA         559  515.\n# ℹ 7,188 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计",
    "href": "SD/3.1_datatransform/index.html#分组统计",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nlibrary(tidyverse)\n\nmtcars %&gt;%\n  group_by(cyl) %&gt;%\n  summarize(n = n())\n\n# A tibble: 3 × 2\n    cyl     n\n  &lt;dbl&gt; &lt;int&gt;\n1     4    11\n2     6     7\n3     8    14"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-1",
    "href": "SD/3.1_datatransform/index.html#分组统计-1",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  group_by(month)\n\n# A tibble: 336,776 × 19\n# Groups:   month [12]\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-2",
    "href": "SD/3.1_datatransform/index.html#分组统计-2",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  group_by(month) |&gt;\n  summarize(\n    avg_delay = mean(dep_delay)\n  )\n\n# A tibble: 12 × 2\n   month avg_delay\n   &lt;int&gt;     &lt;dbl&gt;\n 1     1        NA\n 2     2        NA\n 3     3        NA\n 4     4        NA\n 5     5        NA\n 6     6        NA\n 7     7        NA\n 8     8        NA\n 9     9        NA\n10    10        NA\n11    11        NA\n12    12        NA"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-3",
    "href": "SD/3.1_datatransform/index.html#分组统计-3",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  group_by(month) |&gt;\n  summarize(\n    avg_delay = mean(dep_delay, na.rm = TRUE)\n  )\n\n# A tibble: 12 × 2\n   month avg_delay\n   &lt;int&gt;     &lt;dbl&gt;\n 1     1     10.0 \n 2     2     10.8 \n 3     3     13.2 \n 4     4     13.9 \n 5     5     13.0 \n 6     6     20.8 \n 7     7     21.7 \n 8     8     12.6 \n 9     9      6.72\n10    10      6.24\n11    11      5.44\n12    12     16.6"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-4",
    "href": "SD/3.1_datatransform/index.html#分组统计-4",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  group_by(month) |&gt;\n  summarize(\n    avg_delay = mean(dep_delay, na.rm = TRUE),\n    n = n()\n  )\n\n# A tibble: 12 × 3\n   month avg_delay     n\n   &lt;int&gt;     &lt;dbl&gt; &lt;int&gt;\n 1     1     10.0  27004\n 2     2     10.8  24951\n 3     3     13.2  28834\n 4     4     13.9  28330\n 5     5     13.0  28796\n 6     6     20.8  28243\n 7     7     21.7  29425\n 8     8     12.6  29327\n 9     9      6.72 27574\n10    10      6.24 28889\n11    11      5.44 27268\n12    12     16.6  28135"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-5",
    "href": "SD/3.1_datatransform/index.html#分组统计-5",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  group_by(dest) |&gt;\n  slice_max(arr_delay, n = 1) |&gt;\n  relocate(dest)\n\n# A tibble: 108 × 19\n# Groups:   dest [105]\n   dest   year month   day dep_time sched_dep_time dep_delay arr_time\n   &lt;chr&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;\n 1 ABQ    2013     7    22     2145           2007        98      132\n 2 ACK    2013     7    23     1139            800       219     1250\n 3 ALB    2013     1    25      123           2000       323      229\n 4 ANC    2013     8    17     1740           1625        75     2042\n 5 ATL    2013     7    22     2257            759       898      121\n 6 AUS    2013     7    10     2056           1505       351     2347\n 7 AVL    2013     8    13     1156            832       204     1417\n 8 BDL    2013     2    21     1728           1316       252     1839\n 9 BGR    2013    12     1     1504           1056       248     1628\n10 BHM    2013     4    10       25           1900       325      136\n# ℹ 98 more rows\n# ℹ 11 more variables: sched_arr_time &lt;int&gt;, arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;,\n#   flight &lt;int&gt;, tailnum &lt;chr&gt;, origin &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-6",
    "href": "SD/3.1_datatransform/index.html#分组统计-6",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  filter(dest == \"IAH\") |&gt;\n  group_by(year, month, day) |&gt;\n  summarize(\n    arr_delay = mean(arr_delay, na.rm = TRUE)\n  )\n\n# A tibble: 365 × 4\n# Groups:   year, month [12]\n    year month   day arr_delay\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;     &lt;dbl&gt;\n 1  2013     1     1     17.8 \n 2  2013     1     2      7   \n 3  2013     1     3     18.3 \n 4  2013     1     4     -3.2 \n 5  2013     1     5     20.2 \n 6  2013     1     6      9.28\n 7  2013     1     7     -7.74\n 8  2013     1     8      7.79\n 9  2013     1     9     18.1 \n10  2013     1    10      6.68\n# ℹ 355 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组",
    "href": "SD/3.1_datatransform/index.html#分组",
    "title": "Data Transform",
    "section": "分组",
    "text": "分组\n\ndaily &lt;- flights |&gt;\n  group_by(year, month, day)\ndaily\n\n# A tibble: 336,776 × 19\n# Groups:   year, month, day [365]\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-7",
    "href": "SD/3.1_datatransform/index.html#分组统计-7",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\ndaily_flights &lt;- daily |&gt;\n  summarize(n = n())"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-8",
    "href": "SD/3.1_datatransform/index.html#分组统计-8",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\ndaily_flights &lt;- daily |&gt;\n  summarize(\n    n = n(),\n    .groups = \"drop_last\"\n  )"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#删除分组",
    "href": "SD/3.1_datatransform/index.html#删除分组",
    "title": "Data Transform",
    "section": "删除分组",
    "text": "删除分组\n\ndaily |&gt; ungroup()\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#删除分组-1",
    "href": "SD/3.1_datatransform/index.html#删除分组-1",
    "title": "Data Transform",
    "section": "删除分组",
    "text": "删除分组\n\ndaily |&gt;\n  ungroup() |&gt;\n  summarize(\n    avg_delay = mean(dep_delay, na.rm = TRUE),\n    flights = n()\n  )\n\n# A tibble: 1 × 2\n  avg_delay flights\n      &lt;dbl&gt;   &lt;int&gt;\n1      12.6  336776"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-9",
    "href": "SD/3.1_datatransform/index.html#分组统计-9",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  summarize(\n    delay = mean(dep_delay, na.rm = TRUE),\n    n = n(),\n    .by = month\n  )\n\n# A tibble: 12 × 3\n   month delay     n\n   &lt;int&gt; &lt;dbl&gt; &lt;int&gt;\n 1     1 10.0  27004\n 2    10  6.24 28889\n 3    11  5.44 27268\n 4    12 16.6  28135\n 5     2 10.8  24951\n 6     3 13.2  28834\n 7     4 13.9  28330\n 8     5 13.0  28796\n 9     6 20.8  28243\n10     7 21.7  29425\n11     8 12.6  29327\n12     9  6.72 27574"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#分组统计-10",
    "href": "SD/3.1_datatransform/index.html#分组统计-10",
    "title": "Data Transform",
    "section": "分组统计",
    "text": "分组统计\n\nflights |&gt;\n  summarize(\n    delay = mean(dep_delay, na.rm = TRUE),\n    n = n(),\n    .by = c(origin, dest)\n  )\n\n# A tibble: 224 × 4\n   origin dest  delay     n\n   &lt;chr&gt;  &lt;chr&gt; &lt;dbl&gt; &lt;int&gt;\n 1 EWR    IAH   11.8   3973\n 2 LGA    IAH    9.06  2951\n 3 JFK    MIA    9.34  3314\n 4 JFK    BQN    6.67   599\n 5 LGA    ATL   11.4  10263\n 6 EWR    ORD   14.6   6100\n 7 EWR    FLL   13.5   3793\n 8 LGA    IAD   16.7   1803\n 9 JFK    MCO   10.6   5464\n10 LGA    ORD   10.7   8857\n# ℹ 214 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-3",
    "href": "SD/3.1_datatransform/index.html#练习-3",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\ndf &lt;- tibble(\n  x = 1:5,\n  y = c(\"a\", \"b\", \"a\", \"a\", \"b\"),\n  z = c(\"K\", \"K\", \"L\", \"L\", \"K\")\n)\ndf\n\n# A tibble: 5 × 3\n      x y     z    \n  &lt;int&gt; &lt;chr&gt; &lt;chr&gt;\n1     1 a     K    \n2     2 b     K    \n3     3 a     L    \n4     4 a     L    \n5     5 b     K    \n\n\n\ndf |&gt; arrange(y)"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-4",
    "href": "SD/3.1_datatransform/index.html#练习-4",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\n\n# A tibble: 5 × 3\n      x y     z    \n  &lt;int&gt; &lt;chr&gt; &lt;chr&gt;\n1     1 a     K    \n2     2 b     K    \n3     3 a     L    \n4     4 a     L    \n5     5 b     K    \n\n\n\ndf |&gt;\n  group_by(y) |&gt;\n  summarize(mean_x = mean(x))"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-5",
    "href": "SD/3.1_datatransform/index.html#练习-5",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\n\n# A tibble: 5 × 3\n      x y     z    \n  &lt;int&gt; &lt;chr&gt; &lt;chr&gt;\n1     1 a     K    \n2     2 b     K    \n3     3 a     L    \n4     4 a     L    \n5     5 b     K    \n\n\n\ndf |&gt;\n  group_by(y, z) |&gt;\n  summarize(mean_x = mean(x))"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-6",
    "href": "SD/3.1_datatransform/index.html#练习-6",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\n\n# A tibble: 5 × 3\n      x y     z    \n  &lt;int&gt; &lt;chr&gt; &lt;chr&gt;\n1     1 a     K    \n2     2 b     K    \n3     3 a     L    \n4     4 a     L    \n5     5 b     K    \n\n\n\ndf |&gt;\n  group_by(y, z) |&gt;\n  summarize(mean_x = mean(x), .groups = \"drop\")"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-7",
    "href": "SD/3.1_datatransform/index.html#练习-7",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\n\n# A tibble: 5 × 3\n      x y     z    \n  &lt;int&gt; &lt;chr&gt; &lt;chr&gt;\n1     1 a     K    \n2     2 b     K    \n3     3 a     L    \n4     4 a     L    \n5     5 b     K    \n\n\n\ndf |&gt;\n  group_by(y, z) |&gt;\n  summarize(mean_x = mean(x))\n\ndf |&gt;\n  group_by(y, z) |&gt;\n  mutate(mean_x = mean(x))"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-8",
    "href": "SD/3.1_datatransform/index.html#练习-8",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\n计算不同采样点的平均CO浓度、最大CO浓度、最小CO浓度、中位数CO浓度（CO_mg/m3）。\n计算各小时全国的平均CO浓度、最大CO浓度、最小CO浓度、中位数CO浓度（CO_mg/m3）。\n计算不同采样点各小时的平均CO浓度、最大CO浓度、最小CO浓度、中位数CO浓度（CO_mg/m3）。\n计算各采样点中CO浓度小于全国平均CO浓度的占比。\n找出全国各采样点中CO浓度小于全国平均CO浓度的占比最高的10个采样点。\n\n\nairqualitydf &lt;- readxl::read_xlsx(\"../../data/airquality.xlsx\", sheet = 2)"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-9",
    "href": "SD/3.1_datatransform/index.html#练习-9",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n按月统计dep_delay最大的3个航班的航班号（flight），用逗号连接。\n\n\n\n\n\nyear\nmonth\nflight\n\n\n\n\n2013\n1\nHA51, MQ3695, MQ3944\n\n\n2013\n2\nF9835, DL2319, DL575\n\n\n2013\n3\nDL2119, DL2363, FL361\n\n\n2013\n4\nDL2391, DL1435, AA257\n\n\n2013\n5\nMQ3744, AA257, AA753\n\n\n2013\n6\nMQ3535, DL2007, AA2019\n\n\n2013\n7\nMQ3075, DL2047, VX187\n\n\n2013\n8\nEV4978, DL843, DL1373\n\n\n2013\n9\nAA177, DL2131, FL350\n\n\n2013\n10\nDL502, DL2347, YV2693\n\n\n2013\n11\nDL2042, AA1697, AA1139\n\n\n2013\n12\nAA172, DL1223, AA172"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形示意图",
    "href": "SD/3.1_datatransform/index.html#数据变形示意图",
    "title": "Data Transform",
    "section": "数据变形示意图",
    "text": "数据变形示意图\n\nbillboard\n\n# A tibble: 317 × 79\n   artist     track date.entered   wk1   wk2   wk3   wk4   wk5   wk6   wk7   wk8\n   &lt;chr&gt;      &lt;chr&gt; &lt;date&gt;       &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\n 1 2 Pac      Baby… 2000-02-26      87    82    72    77    87    94    99    NA\n 2 2Ge+her    The … 2000-09-02      91    87    92    NA    NA    NA    NA    NA\n 3 3 Doors D… Kryp… 2000-04-08      81    70    68    67    66    57    54    53\n 4 3 Doors D… Loser 2000-10-21      76    76    72    69    67    65    55    59\n 5 504 Boyz   Wobb… 2000-04-15      57    34    25    17    17    31    36    49\n 6 98^0       Give… 2000-08-19      51    39    34    26    26    19     2     2\n 7 A*Teens    Danc… 2000-07-08      97    97    96    95   100    NA    NA    NA\n 8 Aaliyah    I Do… 2000-01-29      84    62    51    41    38    35    35    38\n 9 Aaliyah    Try … 2000-03-18      59    53    38    28    21    18    16    14\n10 Adams, Yo… Open… 2000-08-26      76    76    74    69    68    67    61    58\n# ℹ 307 more rows\n# ℹ 68 more variables: wk9 &lt;dbl&gt;, wk10 &lt;dbl&gt;, wk11 &lt;dbl&gt;, wk12 &lt;dbl&gt;,\n#   wk13 &lt;dbl&gt;, wk14 &lt;dbl&gt;, wk15 &lt;dbl&gt;, wk16 &lt;dbl&gt;, wk17 &lt;dbl&gt;, wk18 &lt;dbl&gt;,\n#   wk19 &lt;dbl&gt;, wk20 &lt;dbl&gt;, wk21 &lt;dbl&gt;, wk22 &lt;dbl&gt;, wk23 &lt;dbl&gt;, wk24 &lt;dbl&gt;,\n#   wk25 &lt;dbl&gt;, wk26 &lt;dbl&gt;, wk27 &lt;dbl&gt;, wk28 &lt;dbl&gt;, wk29 &lt;dbl&gt;, wk30 &lt;dbl&gt;,\n#   wk31 &lt;dbl&gt;, wk32 &lt;dbl&gt;, wk33 &lt;dbl&gt;, wk34 &lt;dbl&gt;, wk35 &lt;dbl&gt;, wk36 &lt;dbl&gt;,\n#   wk37 &lt;dbl&gt;, wk38 &lt;dbl&gt;, wk39 &lt;dbl&gt;, wk40 &lt;dbl&gt;, wk41 &lt;dbl&gt;, wk42 &lt;dbl&gt;, …\n\nknitr::include_graphics(\"../../image/tidy-data/variables.png\", dpi = 270)"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形",
    "href": "SD/3.1_datatransform/index.html#数据变形",
    "title": "Data Transform",
    "section": "数据变形",
    "text": "数据变形\n\nbillboard |&gt;\n  pivot_longer(\n    cols = starts_with(\"wk\"),\n    names_to = \"week\",\n    values_to = \"rank\",\n    values_drop_na = TRUE\n  )\n\n# A tibble: 5,307 × 5\n   artist  track                   date.entered week   rank\n   &lt;chr&gt;   &lt;chr&gt;                   &lt;date&gt;       &lt;chr&gt; &lt;dbl&gt;\n 1 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk1      87\n 2 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk2      82\n 3 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk3      72\n 4 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk4      77\n 5 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk5      87\n 6 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk6      94\n 7 2 Pac   Baby Don't Cry (Keep... 2000-02-26   wk7      99\n 8 2Ge+her The Hardest Part Of ... 2000-09-02   wk1      91\n 9 2Ge+her The Hardest Part Of ... 2000-09-02   wk2      87\n10 2Ge+her The Hardest Part Of ... 2000-09-02   wk3      92\n# ℹ 5,297 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形-1",
    "href": "SD/3.1_datatransform/index.html#数据变形-1",
    "title": "Data Transform",
    "section": "数据变形",
    "text": "数据变形\n\nbillboard_longer &lt;- billboard |&gt;\n  pivot_longer(\n    cols = starts_with(\"wk\"),\n    names_to = \"week\",\n    values_to = \"rank\",\n    values_drop_na = TRUE\n  ) |&gt;\n  mutate(\n    week = parse_number(week)\n  )\nbillboard_longer\n\n# A tibble: 5,307 × 5\n   artist  track                   date.entered  week  rank\n   &lt;chr&gt;   &lt;chr&gt;                   &lt;date&gt;       &lt;dbl&gt; &lt;dbl&gt;\n 1 2 Pac   Baby Don't Cry (Keep... 2000-02-26       1    87\n 2 2 Pac   Baby Don't Cry (Keep... 2000-02-26       2    82\n 3 2 Pac   Baby Don't Cry (Keep... 2000-02-26       3    72\n 4 2 Pac   Baby Don't Cry (Keep... 2000-02-26       4    77\n 5 2 Pac   Baby Don't Cry (Keep... 2000-02-26       5    87\n 6 2 Pac   Baby Don't Cry (Keep... 2000-02-26       6    94\n 7 2 Pac   Baby Don't Cry (Keep... 2000-02-26       7    99\n 8 2Ge+her The Hardest Part Of ... 2000-09-02       1    91\n 9 2Ge+her The Hardest Part Of ... 2000-09-02       2    87\n10 2Ge+her The Hardest Part Of ... 2000-09-02       3    92\n# ℹ 5,297 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-10",
    "href": "SD/3.1_datatransform/index.html#练习-10",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\n\n# A tibble: 3 × 3\n  id      bp1   bp2\n  &lt;chr&gt; &lt;dbl&gt; &lt;dbl&gt;\n1 A       100   120\n2 B       140   115\n3 C       120   125\n\n\n将以上数据(df)转换为如下形式。\n\n\n# A tibble: 6 × 3\n  id    measurement value\n  &lt;chr&gt; &lt;chr&gt;       &lt;dbl&gt;\n1 A     bp1           100\n2 A     bp2           120\n3 B     bp1           140\n4 B     bp2           115\n5 C     bp1           120\n6 C     bp2           125"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-11",
    "href": "SD/3.1_datatransform/index.html#练习-11",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n请转换如下iris数据。\n\n\n# A tibble: 3 × 5\n  Sepal.Length Sepal.Width Petal.Length Petal.Width Species\n         &lt;dbl&gt;       &lt;dbl&gt;        &lt;dbl&gt;       &lt;dbl&gt; &lt;fct&gt;  \n1          5.1         3.5          1.4         0.2 setosa \n2          4.9         3            1.4         0.2 setosa \n3          4.7         3.2          1.3         0.2 setosa \n\n\n转为如下形式：\n\n\n# A tibble: 6 × 3\n  Species flower_attr  attr_value\n  &lt;fct&gt;   &lt;chr&gt;             &lt;dbl&gt;\n1 setosa  Sepal.Length        5.1\n2 setosa  Sepal.Width         3.5\n3 setosa  Petal.Length        1.4\n4 setosa  Petal.Width         0.2\n5 setosa  Sepal.Length        4.9\n6 setosa  Sepal.Width         3"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形示意图2",
    "href": "SD/3.1_datatransform/index.html#数据变形示意图2",
    "title": "Data Transform",
    "section": "数据变形示意图2",
    "text": "数据变形示意图2\n\nwho2\n\n# A tibble: 7,240 × 58\n   country      year sp_m_014 sp_m_1524 sp_m_2534 sp_m_3544 sp_m_4554 sp_m_5564\n   &lt;chr&gt;       &lt;dbl&gt;    &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;     &lt;dbl&gt;\n 1 Afghanistan  1980       NA        NA        NA        NA        NA        NA\n 2 Afghanistan  1981       NA        NA        NA        NA        NA        NA\n 3 Afghanistan  1982       NA        NA        NA        NA        NA        NA\n 4 Afghanistan  1983       NA        NA        NA        NA        NA        NA\n 5 Afghanistan  1984       NA        NA        NA        NA        NA        NA\n 6 Afghanistan  1985       NA        NA        NA        NA        NA        NA\n 7 Afghanistan  1986       NA        NA        NA        NA        NA        NA\n 8 Afghanistan  1987       NA        NA        NA        NA        NA        NA\n 9 Afghanistan  1988       NA        NA        NA        NA        NA        NA\n10 Afghanistan  1989       NA        NA        NA        NA        NA        NA\n# ℹ 7,230 more rows\n# ℹ 50 more variables: sp_m_65 &lt;dbl&gt;, sp_f_014 &lt;dbl&gt;, sp_f_1524 &lt;dbl&gt;,\n#   sp_f_2534 &lt;dbl&gt;, sp_f_3544 &lt;dbl&gt;, sp_f_4554 &lt;dbl&gt;, sp_f_5564 &lt;dbl&gt;,\n#   sp_f_65 &lt;dbl&gt;, sn_m_014 &lt;dbl&gt;, sn_m_1524 &lt;dbl&gt;, sn_m_2534 &lt;dbl&gt;,\n#   sn_m_3544 &lt;dbl&gt;, sn_m_4554 &lt;dbl&gt;, sn_m_5564 &lt;dbl&gt;, sn_m_65 &lt;dbl&gt;,\n#   sn_f_014 &lt;dbl&gt;, sn_f_1524 &lt;dbl&gt;, sn_f_2534 &lt;dbl&gt;, sn_f_3544 &lt;dbl&gt;,\n#   sn_f_4554 &lt;dbl&gt;, sn_f_5564 &lt;dbl&gt;, sn_f_65 &lt;dbl&gt;, ep_m_014 &lt;dbl&gt;, …\n\nknitr::include_graphics(\"../../image/tidy-data/multiple-names.png\", dpi = 270)"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形-2",
    "href": "SD/3.1_datatransform/index.html#数据变形-2",
    "title": "Data Transform",
    "section": "数据变形",
    "text": "数据变形\n\nwho2 |&gt;\n  pivot_longer(\n    cols = !(country:year),\n    names_to = c(\"diagnosis\", \"gender\", \"age\"),\n    names_sep = \"_\",\n    values_to = \"count\"\n  )\n\n# A tibble: 405,440 × 6\n   country      year diagnosis gender age   count\n   &lt;chr&gt;       &lt;dbl&gt; &lt;chr&gt;     &lt;chr&gt;  &lt;chr&gt; &lt;dbl&gt;\n 1 Afghanistan  1980 sp        m      014      NA\n 2 Afghanistan  1980 sp        m      1524     NA\n 3 Afghanistan  1980 sp        m      2534     NA\n 4 Afghanistan  1980 sp        m      3544     NA\n 5 Afghanistan  1980 sp        m      4554     NA\n 6 Afghanistan  1980 sp        m      5564     NA\n 7 Afghanistan  1980 sp        m      65       NA\n 8 Afghanistan  1980 sp        f      014      NA\n 9 Afghanistan  1980 sp        f      1524     NA\n10 Afghanistan  1980 sp        f      2534     NA\n# ℹ 405,430 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形示意图-1",
    "href": "SD/3.1_datatransform/index.html#数据变形示意图-1",
    "title": "Data Transform",
    "section": "数据变形示意图",
    "text": "数据变形示意图\n\nhousehold\n\n# A tibble: 5 × 5\n  family dob_child1 dob_child2 name_child1 name_child2\n   &lt;int&gt; &lt;date&gt;     &lt;date&gt;     &lt;chr&gt;       &lt;chr&gt;      \n1      1 1998-11-26 2000-01-29 Susan       Jose       \n2      2 1996-06-22 NA         Mark        &lt;NA&gt;       \n3      3 2002-07-11 2004-04-05 Sam         Seth       \n4      4 2004-10-10 2009-08-27 Craig       Khai       \n5      5 2000-12-05 2005-02-28 Parker      Gracie     \n\nknitr::include_graphics(\"../../image/tidy-data/names-and-values.png\", dpi = 270)"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形-3",
    "href": "SD/3.1_datatransform/index.html#数据变形-3",
    "title": "Data Transform",
    "section": "数据变形",
    "text": "数据变形\n\nhousehold |&gt;\n  pivot_longer(\n    cols = !family,\n    names_to = c(\".value\", \"child\"),\n    names_sep = \"_\",\n    values_drop_na = TRUE\n  )\n\n# A tibble: 9 × 4\n  family child  dob        name  \n   &lt;int&gt; &lt;chr&gt;  &lt;date&gt;     &lt;chr&gt; \n1      1 child1 1998-11-26 Susan \n2      1 child2 2000-01-29 Jose  \n3      2 child1 1996-06-22 Mark  \n4      3 child1 2002-07-11 Sam   \n5      3 child2 2004-04-05 Seth  \n6      4 child1 2004-10-10 Craig \n7      4 child2 2009-08-27 Khai  \n8      5 child1 2000-12-05 Parker\n9      5 child2 2005-02-28 Gracie"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#查看数据",
    "href": "SD/3.1_datatransform/index.html#查看数据",
    "title": "Data Transform",
    "section": "查看数据",
    "text": "查看数据\n\ncms_patient_experience\n\n# A tibble: 500 × 5\n   org_pac_id org_nm                           measure_cd measure_title prf_rate\n   &lt;chr&gt;      &lt;chr&gt;                            &lt;chr&gt;      &lt;chr&gt;            &lt;dbl&gt;\n 1 0446157747 USC CARE MEDICAL GROUP INC       CAHPS_GRP… CAHPS for MI…       63\n 2 0446157747 USC CARE MEDICAL GROUP INC       CAHPS_GRP… CAHPS for MI…       87\n 3 0446157747 USC CARE MEDICAL GROUP INC       CAHPS_GRP… CAHPS for MI…       86\n 4 0446157747 USC CARE MEDICAL GROUP INC       CAHPS_GRP… CAHPS for MI…       57\n 5 0446157747 USC CARE MEDICAL GROUP INC       CAHPS_GRP… CAHPS for MI…       85\n 6 0446157747 USC CARE MEDICAL GROUP INC       CAHPS_GRP… CAHPS for MI…       24\n 7 0446162697 ASSOCIATION OF UNIVERSITY PHYSI… CAHPS_GRP… CAHPS for MI…       59\n 8 0446162697 ASSOCIATION OF UNIVERSITY PHYSI… CAHPS_GRP… CAHPS for MI…       85\n 9 0446162697 ASSOCIATION OF UNIVERSITY PHYSI… CAHPS_GRP… CAHPS for MI…       83\n10 0446162697 ASSOCIATION OF UNIVERSITY PHYSI… CAHPS_GRP… CAHPS for MI…       63\n# ℹ 490 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#查看数据-1",
    "href": "SD/3.1_datatransform/index.html#查看数据-1",
    "title": "Data Transform",
    "section": "查看数据",
    "text": "查看数据\n\ncms_patient_experience |&gt;\n  distinct(measure_cd, measure_title)\n\n# A tibble: 6 × 2\n  measure_cd   measure_title                                                    \n  &lt;chr&gt;        &lt;chr&gt;                                                            \n1 CAHPS_GRP_1  CAHPS for MIPS SSM: Getting Timely Care, Appointments, and Infor…\n2 CAHPS_GRP_2  CAHPS for MIPS SSM: How Well Providers Communicate               \n3 CAHPS_GRP_3  CAHPS for MIPS SSM: Patient's Rating of Provider                 \n4 CAHPS_GRP_5  CAHPS for MIPS SSM: Health Promotion and Education               \n5 CAHPS_GRP_8  CAHPS for MIPS SSM: Courteous and Helpful Office Staff           \n6 CAHPS_GRP_12 CAHPS for MIPS SSM: Stewardship of Patient Resources"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形变宽",
    "href": "SD/3.1_datatransform/index.html#数据变形变宽",
    "title": "Data Transform",
    "section": "数据变形（变宽）",
    "text": "数据变形（变宽）\n\ncms_patient_experience |&gt;\n  pivot_wider(\n    names_from = measure_cd,\n    values_from = prf_rate\n  )\n\n# A tibble: 500 × 9\n   org_pac_id org_nm           measure_title CAHPS_GRP_1 CAHPS_GRP_2 CAHPS_GRP_3\n   &lt;chr&gt;      &lt;chr&gt;            &lt;chr&gt;               &lt;dbl&gt;       &lt;dbl&gt;       &lt;dbl&gt;\n 1 0446157747 USC CARE MEDICA… CAHPS for MI…          63          NA          NA\n 2 0446157747 USC CARE MEDICA… CAHPS for MI…          NA          87          NA\n 3 0446157747 USC CARE MEDICA… CAHPS for MI…          NA          NA          86\n 4 0446157747 USC CARE MEDICA… CAHPS for MI…          NA          NA          NA\n 5 0446157747 USC CARE MEDICA… CAHPS for MI…          NA          NA          NA\n 6 0446157747 USC CARE MEDICA… CAHPS for MI…          NA          NA          NA\n 7 0446162697 ASSOCIATION OF … CAHPS for MI…          59          NA          NA\n 8 0446162697 ASSOCIATION OF … CAHPS for MI…          NA          85          NA\n 9 0446162697 ASSOCIATION OF … CAHPS for MI…          NA          NA          83\n10 0446162697 ASSOCIATION OF … CAHPS for MI…          NA          NA          NA\n# ℹ 490 more rows\n# ℹ 3 more variables: CAHPS_GRP_5 &lt;dbl&gt;, CAHPS_GRP_8 &lt;dbl&gt;, CAHPS_GRP_12 &lt;dbl&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#数据变形变宽-1",
    "href": "SD/3.1_datatransform/index.html#数据变形变宽-1",
    "title": "Data Transform",
    "section": "数据变形（变宽）",
    "text": "数据变形（变宽）\n\ncms_patient_experience |&gt;\n  pivot_wider(\n    id_cols = starts_with(\"org\"),\n    names_from = measure_cd,\n    values_from = prf_rate\n  )\n\n# A tibble: 95 × 8\n   org_pac_id org_nm CAHPS_GRP_1 CAHPS_GRP_2 CAHPS_GRP_3 CAHPS_GRP_5 CAHPS_GRP_8\n   &lt;chr&gt;      &lt;chr&gt;        &lt;dbl&gt;       &lt;dbl&gt;       &lt;dbl&gt;       &lt;dbl&gt;       &lt;dbl&gt;\n 1 0446157747 USC C…          63          87          86          57          85\n 2 0446162697 ASSOC…          59          85          83          63          88\n 3 0547164295 BEAVE…          49          NA          75          44          73\n 4 0749333730 CAPE …          67          84          85          65          82\n 5 0840104360 ALLIA…          66          87          87          64          87\n 6 0840109864 REX H…          73          87          84          67          91\n 7 0840513552 SCL H…          58          83          76          58          78\n 8 0941545784 GRITM…          46          86          81          54          NA\n 9 1052612785 COMMU…          65          84          80          58          87\n10 1254237779 OUR L…          61          NA          NA          65          NA\n# ℹ 85 more rows\n# ℹ 1 more variable: CAHPS_GRP_12 &lt;dbl&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-12",
    "href": "SD/3.1_datatransform/index.html#练习-12",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\ndf &lt;- tribble(\n  ~id,\n  ~measurement,\n  ~value,\n  \"A\",\n  \"bp1\",\n  100,\n  \"B\",\n  \"bp1\",\n  140,\n  \"B\",\n  \"bp2\",\n  115,\n  \"A\",\n  \"bp2\",\n  120,\n  \"A\",\n  \"bp3\",\n  105\n)\n\n变形成如下形式：\n\n\n# A tibble: 2 × 4\n  id      bp1   bp2   bp3\n  &lt;chr&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;\n1 A       100   120   105\n2 B       140   115    NA"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习变宽",
    "href": "SD/3.1_datatransform/index.html#练习变宽",
    "title": "Data Transform",
    "section": "练习：变宽",
    "text": "练习：变宽\n\ndf &lt;- tribble(\n  ~id,\n  ~measurement,\n  ~value,\n  \"A\",\n  \"bp1\",\n  100,\n  \"A\",\n  \"bp1\",\n  102,\n  \"A\",\n  \"bp2\",\n  120,\n  \"B\",\n  \"bp1\",\n  140,\n  \"B\",\n  \"bp2\",\n  115\n)"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-13",
    "href": "SD/3.1_datatransform/index.html#练习-13",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\ndf |&gt;\n  pivot_wider(\n    names_from = measurement,\n    values_from = value\n  )\n\n# A tibble: 2 × 3\n  id    bp1       bp2      \n  &lt;chr&gt; &lt;list&gt;    &lt;list&gt;   \n1 A     &lt;dbl [2]&gt; &lt;dbl [1]&gt;\n2 B     &lt;dbl [1]&gt; &lt;dbl [1]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-14",
    "href": "SD/3.1_datatransform/index.html#练习-14",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\ndf |&gt;\n  group_by(id, measurement) |&gt;\n  summarize(n = n(), .groups = \"drop\") |&gt;\n  filter(n &gt; 1)\n\n# A tibble: 1 × 3\n  id    measurement     n\n  &lt;chr&gt; &lt;chr&gt;       &lt;int&gt;\n1 A     bp1             2"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\n\n\n# A tibble: 6 × 3\n      x     y     z\n  &lt;dbl&gt; &lt;int&gt; &lt;int&gt;\n1     1     1     6\n2     1     2     5\n3     1     3     4\n4     2     4     3\n5     2     5     2\n6     3     6     1\n\n\n\ndf %&gt;% nest(data = c(y, z))\n\n# A tibble: 3 × 2\n      x data            \n  &lt;dbl&gt; &lt;list&gt;          \n1     1 &lt;tibble [3 × 2]&gt;\n2     2 &lt;tibble [2 × 2]&gt;\n3     3 &lt;tibble [1 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-1",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-1",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nSpecify variables to nest by (rather than variables to nest) using .by\n\ndf %&gt;% nest(.by = x)\n\n# A tibble: 3 × 2\n      x data            \n  &lt;dbl&gt; &lt;list&gt;          \n1     1 &lt;tibble [3 × 2]&gt;\n2     2 &lt;tibble [2 × 2]&gt;\n3     3 &lt;tibble [1 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-2",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-2",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nIn this case, since ... isn’t used you can specify the resulting column name with .key\n\ndf %&gt;% nest(.by = x, .key = \"cols\")\n\n# A tibble: 3 × 2\n      x cols            \n  &lt;dbl&gt; &lt;list&gt;          \n1     1 &lt;tibble [3 × 2]&gt;\n2     2 &lt;tibble [2 × 2]&gt;\n3     3 &lt;tibble [1 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-3",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-3",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nUse tidyselect syntax and helpers, just like in dplyr::select()\n\ndf %&gt;% nest(data = any_of(c(\"y\", \"z\")))\n\n# A tibble: 3 × 2\n      x data            \n  &lt;dbl&gt; &lt;list&gt;          \n1     1 &lt;tibble [3 × 2]&gt;\n2     2 &lt;tibble [2 × 2]&gt;\n3     3 &lt;tibble [1 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-4",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-4",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\n... and .by can be used together to drop columns you no longer need, or to include the columns you are nesting by in the inner data frame too. This drops z:\n\ndf %&gt;% nest(data = y, .by = x)\n\n# A tibble: 3 × 2\n      x data            \n  &lt;dbl&gt; &lt;list&gt;          \n1     1 &lt;tibble [3 × 1]&gt;\n2     2 &lt;tibble [2 × 1]&gt;\n3     3 &lt;tibble [1 × 1]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-5",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-5",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nThis includes x in the inner data frame:\n\ndf %&gt;% nest(data = everything(), .by = x)\n\n# A tibble: 3 × 2\n      x data            \n  &lt;dbl&gt; &lt;list&gt;          \n1     1 &lt;tibble [3 × 3]&gt;\n2     2 &lt;tibble [2 × 3]&gt;\n3     3 &lt;tibble [1 × 3]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-6",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-6",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nMultiple nesting structures can be specified at once\n\niris %&gt;%\n  nest(petal = starts_with(\"Petal\"), sepal = starts_with(\"Sepal\"))\n\n# A tibble: 3 × 3\n  Species    petal             sepal            \n  &lt;fct&gt;      &lt;list&gt;            &lt;list&gt;           \n1 setosa     &lt;tibble [50 × 2]&gt; &lt;tibble [50 × 2]&gt;\n2 versicolor &lt;tibble [50 × 2]&gt; &lt;tibble [50 × 2]&gt;\n3 virginica  &lt;tibble [50 × 2]&gt; &lt;tibble [50 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-7",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-7",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\n\niris %&gt;%\n  nest(width = contains(\"Width\"), length = contains(\"Length\"))\n\n# A tibble: 3 × 3\n  Species    width             length           \n  &lt;fct&gt;      &lt;list&gt;            &lt;list&gt;           \n1 setosa     &lt;tibble [50 × 2]&gt; &lt;tibble [50 × 2]&gt;\n2 versicolor &lt;tibble [50 × 2]&gt; &lt;tibble [50 × 2]&gt;\n3 virginica  &lt;tibble [50 × 2]&gt; &lt;tibble [50 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-8",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-8",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nNesting a grouped data frame nests all variables apart from the group vars\n\nfish_encounters\n\n# A tibble: 114 × 3\n   fish  station  seen\n   &lt;fct&gt; &lt;fct&gt;   &lt;int&gt;\n 1 4842  Release     1\n 2 4842  I80_1       1\n 3 4842  Lisbon      1\n 4 4842  Rstr        1\n 5 4842  Base_TD     1\n 6 4842  BCE         1\n 7 4842  BCW         1\n 8 4842  BCE2        1\n 9 4842  BCW2        1\n10 4842  MAE         1\n# ℹ 104 more rows\n\nfish_encounters %&gt;%\n  dplyr::group_by(fish) %&gt;%\n  nest()\n\n# A tibble: 19 × 2\n# Groups:   fish [19]\n   fish  data             \n   &lt;fct&gt; &lt;list&gt;           \n 1 4842  &lt;tibble [11 × 2]&gt;\n 2 4843  &lt;tibble [11 × 2]&gt;\n 3 4844  &lt;tibble [11 × 2]&gt;\n 4 4845  &lt;tibble [5 × 2]&gt; \n 5 4847  &lt;tibble [3 × 2]&gt; \n 6 4848  &lt;tibble [4 × 2]&gt; \n 7 4849  &lt;tibble [2 × 2]&gt; \n 8 4850  &lt;tibble [6 × 2]&gt; \n 9 4851  &lt;tibble [2 × 2]&gt; \n10 4854  &lt;tibble [2 × 2]&gt; \n11 4855  &lt;tibble [5 × 2]&gt; \n12 4857  &lt;tibble [9 × 2]&gt; \n13 4858  &lt;tibble [11 × 2]&gt;\n14 4859  &lt;tibble [5 × 2]&gt; \n15 4861  &lt;tibble [11 × 2]&gt;\n16 4862  &lt;tibble [9 × 2]&gt; \n17 4863  &lt;tibble [2 × 2]&gt; \n18 4864  &lt;tibble [2 × 2]&gt; \n19 4865  &lt;tibble [3 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-9",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-9",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nThat is similar to nest(.by = ), except here the result isn’t grouped\n\nfish_encounters %&gt;%\n  nest(.by = fish)\n\n# A tibble: 19 × 2\n   fish  data             \n   &lt;fct&gt; &lt;list&gt;           \n 1 4842  &lt;tibble [11 × 2]&gt;\n 2 4843  &lt;tibble [11 × 2]&gt;\n 3 4844  &lt;tibble [11 × 2]&gt;\n 4 4845  &lt;tibble [5 × 2]&gt; \n 5 4847  &lt;tibble [3 × 2]&gt; \n 6 4848  &lt;tibble [4 × 2]&gt; \n 7 4849  &lt;tibble [2 × 2]&gt; \n 8 4850  &lt;tibble [6 × 2]&gt; \n 9 4851  &lt;tibble [2 × 2]&gt; \n10 4854  &lt;tibble [2 × 2]&gt; \n11 4855  &lt;tibble [5 × 2]&gt; \n12 4857  &lt;tibble [9 × 2]&gt; \n13 4858  &lt;tibble [11 × 2]&gt;\n14 4859  &lt;tibble [5 × 2]&gt; \n15 4861  &lt;tibble [11 × 2]&gt;\n16 4862  &lt;tibble [9 × 2]&gt; \n17 4863  &lt;tibble [2 × 2]&gt; \n18 4864  &lt;tibble [2 × 2]&gt; \n19 4865  &lt;tibble [3 × 2]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest套嵌数据框-10",
    "href": "SD/3.1_datatransform/index.html#nest套嵌数据框-10",
    "title": "Data Transform",
    "section": "nest，套嵌数据框",
    "text": "nest，套嵌数据框\nNesting is often useful for creating per group models\n\nmtcars %&gt;%\n  nest(.by = cyl) %&gt;%\n  dplyr::mutate(models = lapply(data, function(df) lm(mpg ~ wt, data = df)))\n\n# A tibble: 3 × 3\n    cyl data               models\n  &lt;dbl&gt; &lt;list&gt;             &lt;list&gt;\n1     6 &lt;tibble [7 × 10]&gt;  &lt;lm&gt;  \n2     4 &lt;tibble [11 × 10]&gt; &lt;lm&gt;  \n3     8 &lt;tibble [14 × 10]&gt; &lt;lm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-15",
    "href": "SD/3.1_datatransform/index.html#练习-15",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n\n\n# A tibble: 20,088 × 20\n   datetime            site  `CO_mg/m3` `CO_24h_mg/m3` `NO2_μg/m3`\n   &lt;dttm&gt;              &lt;chr&gt;      &lt;dbl&gt;          &lt;dbl&gt;       &lt;dbl&gt;\n 1 2024-03-19 01:00:00 1001A        0.1            0.4           5\n 2 2024-03-19 01:00:00 1003A        0.2            0.4           9\n 3 2024-03-19 01:00:00 1004A        0.2            0.4           4\n 4 2024-03-19 01:00:00 1005A        0.1            0.3           6\n 5 2024-03-19 01:00:00 1006A        0.1            0.4           5\n 6 2024-03-19 01:00:00 1007A        0.3            0.5           6\n 7 2024-03-19 01:00:00 1008A        0.2            0.4           2\n 8 2024-03-19 01:00:00 1009A        0.2            0.4           2\n 9 2024-03-19 01:00:00 1010A        0.1            0.3           2\n10 2024-03-19 01:00:00 1011A        0.2            0.4          12\n# ℹ 20,078 more rows\n# ℹ 15 more variables: `NO2_24h_μg/m3` &lt;dbl&gt;, `O3_μg/m3` &lt;dbl&gt;,\n#   `O3_24h_μg/m3` &lt;lgl&gt;, `O3_8h_μg/m3` &lt;lgl&gt;, `O3_8h_24h_μg/m3` &lt;lgl&gt;,\n#   `PM10_μg/m3` &lt;dbl&gt;, `PM10_24h_μg/m3` &lt;dbl&gt;, `PM2.5_μg/m3` &lt;dbl&gt;,\n#   `PM2.5_24h_μg/m3` &lt;dbl&gt;, `SO2_μg/m3` &lt;dbl&gt;, `SO2_24h_μg/m3` &lt;dbl&gt;,\n#   AQI &lt;dbl&gt;, PrimaryPollutant &lt;chr&gt;, Quality &lt;chr&gt;, Unheathful &lt;chr&gt;\n\n\n\nairqualitydf\n\n# A tibble: 20,088 × 20\n   datetime            site  `CO_mg/m3` `CO_24h_mg/m3` `NO2_μg/m3`\n   &lt;dttm&gt;              &lt;chr&gt;      &lt;dbl&gt;          &lt;dbl&gt;       &lt;dbl&gt;\n 1 2024-03-19 01:00:00 1001A        0.1            0.4           5\n 2 2024-03-19 01:00:00 1003A        0.2            0.4           9\n 3 2024-03-19 01:00:00 1004A        0.2            0.4           4\n 4 2024-03-19 01:00:00 1005A        0.1            0.3           6\n 5 2024-03-19 01:00:00 1006A        0.1            0.4           5\n 6 2024-03-19 01:00:00 1007A        0.3            0.5           6\n 7 2024-03-19 01:00:00 1008A        0.2            0.4           2\n 8 2024-03-19 01:00:00 1009A        0.2            0.4           2\n 9 2024-03-19 01:00:00 1010A        0.1            0.3           2\n10 2024-03-19 01:00:00 1011A        0.2            0.4          12\n# ℹ 20,078 more rows\n# ℹ 15 more variables: `NO2_24h_μg/m3` &lt;dbl&gt;, `O3_μg/m3` &lt;dbl&gt;,\n#   `O3_24h_μg/m3` &lt;lgl&gt;, `O3_8h_μg/m3` &lt;lgl&gt;, `O3_8h_24h_μg/m3` &lt;lgl&gt;,\n#   `PM10_μg/m3` &lt;dbl&gt;, `PM10_24h_μg/m3` &lt;dbl&gt;, `PM2.5_μg/m3` &lt;dbl&gt;,\n#   `PM2.5_24h_μg/m3` &lt;dbl&gt;, `SO2_μg/m3` &lt;dbl&gt;, `SO2_24h_μg/m3` &lt;dbl&gt;,\n#   AQI &lt;dbl&gt;, PrimaryPollutant &lt;chr&gt;, Quality &lt;chr&gt;, Unheathful &lt;chr&gt;\n\nairqualitynestdf &lt;- airqualitydf |&gt;\n  nest(sitedf = -site)"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#nest与group_by联用",
    "href": "SD/3.1_datatransform/index.html#nest与group_by联用",
    "title": "Data Transform",
    "section": "nest与group_by联用",
    "text": "nest与group_by联用\n\n\n# A tibble: 3 × 2\n# Groups:   Species [3]\n  Species    spdf             \n  &lt;fct&gt;      &lt;list&gt;           \n1 setosa     &lt;tibble [50 × 4]&gt;\n2 versicolor &lt;tibble [50 × 4]&gt;\n3 virginica  &lt;tibble [50 × 4]&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#unnest",
    "href": "SD/3.1_datatransform/index.html#unnest",
    "title": "Data Transform",
    "section": "unnest",
    "text": "unnest\n\nairqualitynestdf |&gt; unnest(sitedf)\n\n# A tibble: 20,088 × 20\n   site  datetime            `CO_mg/m3` `CO_24h_mg/m3` `NO2_μg/m3`\n   &lt;chr&gt; &lt;dttm&gt;                   &lt;dbl&gt;          &lt;dbl&gt;       &lt;dbl&gt;\n 1 1001A 2024-03-19 01:00:00        0.1            0.4           5\n 2 1001A 2024-03-19 03:00:00        0.1            0.3           6\n 3 1001A 2024-03-19 05:00:00        0.2            0.3           8\n 4 1001A 2024-03-19 07:00:00        0.2            0.3          12\n 5 1001A 2024-03-19 09:00:00        0.3            0.3          19\n 6 1001A 2024-03-19 11:00:00        0.2            0.2           9\n 7 1001A 2024-03-19 13:00:00        0.2            0.2           7\n 8 1001A 2024-03-19 15:00:00        0.1            0.2           5\n 9 1001A 2024-03-19 17:00:00        0.2            0.2           3\n10 1001A 2024-03-19 19:00:00        0.2            0.2           5\n# ℹ 20,078 more rows\n# ℹ 15 more variables: `NO2_24h_μg/m3` &lt;dbl&gt;, `O3_μg/m3` &lt;dbl&gt;,\n#   `O3_24h_μg/m3` &lt;lgl&gt;, `O3_8h_μg/m3` &lt;lgl&gt;, `O3_8h_24h_μg/m3` &lt;lgl&gt;,\n#   `PM10_μg/m3` &lt;dbl&gt;, `PM10_24h_μg/m3` &lt;dbl&gt;, `PM2.5_μg/m3` &lt;dbl&gt;,\n#   `PM2.5_24h_μg/m3` &lt;dbl&gt;, `SO2_μg/m3` &lt;dbl&gt;, `SO2_24h_μg/m3` &lt;dbl&gt;,\n#   AQI &lt;dbl&gt;, PrimaryPollutant &lt;chr&gt;, Quality &lt;chr&gt;, Unheathful &lt;chr&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#purrr包",
    "href": "SD/3.1_datatransform/index.html#purrr包",
    "title": "Data Transform",
    "section": "purrr包",
    "text": "purrr包\n\nmap()：依次应用一元函数到一个序列的每个元素上，基本等同 lapply()\nmap2()：依次应用二元函数到两个序列的每对元素上\npmap()：应用多元函数到多个序列的每组元素上，可以实现对数据框逐行迭代\nmap 系列默认返回列表型，可根据想要的返回类型添加后缀：_int, _dbl, _lgl, _chr, _df, 甚至可以接着对返回的数据框df做行/列合并：_dfr, _dfc\n如果只想要函数依次作用的过程，而不需要返回结果，改用 walk 系列即可\n所应用的函数，有 purrr公式风格简写（匿名函数），支持一元，二元，多元函数\npurrr 包中的其它有用函数"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#purrr包-1",
    "href": "SD/3.1_datatransform/index.html#purrr包-1",
    "title": "Data Transform",
    "section": "purrr包",
    "text": "purrr包\n\nmap_chr(.x, .f): 返回字符型向量\nmap_lgl(.x, .f): 返回逻辑型向量\nmap_dbl(.x, .f): 返回实数型向量\nmap_int(.x, .f): 返回整数型向量\nmap_dfr(.x, .f): 返回数据框列表，再 bind_rows 按行合并为一个数据框\nmap_dfc(.x, .f): 返回数据框列表，再 bind_cols 按列合并为一个数据框"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#purrr包-cheatsheet",
    "href": "SD/3.1_datatransform/index.html#purrr包-cheatsheet",
    "title": "Data Transform",
    "section": "purrr包-cheatsheet",
    "text": "purrr包-cheatsheet\n\ndwfun::ggsavep(\"../../image/cheatsheet/purrr.svg\", loadit = TRUE)\n\n\n\n\n\n\n\n\npurrr"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#purrr包-2",
    "href": "SD/3.1_datatransform/index.html#purrr包-2",
    "title": "Data Transform",
    "section": "purrr包",
    "text": "purrr包\n生成从1到10的10组随机数，每组随机数个数为100，均值依次为1到10，标准差为1，并存储在数据框中。\n\nres &lt;- list()\nfor (i in 1:10) {\n  res[[i]] &lt;- tibble(随机数 = rnorm(n = 100, mean = i, sd = 1))\n}\nres\n\n[[1]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1 -0.400\n 2  1.26 \n 3 -1.44 \n 4  0.994\n 5  1.62 \n 6  2.15 \n 7 -0.822\n 8  0.753\n 9  0.756\n10  0.717\n# ℹ 90 more rows\n\n[[2]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1  1.61 \n 2  1.21 \n 3  0.943\n 4  1.20 \n 5  0.244\n 6  1.31 \n 7  1.44 \n 8  1.46 \n 9  2.23 \n10  2.98 \n# ℹ 90 more rows\n\n[[3]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1  2.57 \n 2  4.36 \n 3  2.93 \n 4  2.73 \n 5  0.553\n 6  3.07 \n 7  1.90 \n 8  2.37 \n 9  0.936\n10  5.65 \n# ℹ 90 more rows\n\n[[4]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   3.64\n 2   2.94\n 3   5.08\n 4   5.18\n 5   4.20\n 6   3.60\n 7   4.62\n 8   5.97\n 9   5.88\n10   2.41\n# ℹ 90 more rows\n\n[[5]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   6.74\n 2   4.15\n 3   4.04\n 4   6.02\n 5   3.50\n 6   3.82\n 7   5.63\n 8   7.10\n 9   4.39\n10   3.37\n# ℹ 90 more rows\n\n[[6]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   5.29\n 2   6.66\n 3   6.29\n 4   6.20\n 5   4.80\n 6   5.96\n 7   6.69\n 8   6.71\n 9   6.99\n10   7.14\n# ℹ 90 more rows\n\n[[7]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   7.24\n 2   7.63\n 3   7.42\n 4   8.98\n 5   6.49\n 6   5.89\n 7   6.05\n 8   7.48\n 9   6.20\n10   7.23\n# ℹ 90 more rows\n\n[[8]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   8.89\n 2   7.62\n 3   8.61\n 4   8.00\n 5   7.48\n 6   7.36\n 7   7.36\n 8   8.11\n 9   9.18\n10   8.45\n# ℹ 90 more rows\n\n[[9]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1  10.5 \n 2   8.58\n 3   8.48\n 4   9.85\n 5   9.33\n 6   8.17\n 7   8.78\n 8   7.45\n 9   9.23\n10   9.03\n# ℹ 90 more rows\n\n[[10]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1  11.4 \n 2  11.7 \n 3  11.2 \n 4   9.85\n 5   9.82\n 6  10.8 \n 7   9.58\n 8  11.2 \n 9  11.2 \n10  10.7 \n# ℹ 90 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#purrr包-3",
    "href": "SD/3.1_datatransform/index.html#purrr包-3",
    "title": "Data Transform",
    "section": "purrr包",
    "text": "purrr包\n生成从1到10的10组随机数，每组随机数个数为100，均值依次为1到10，标准差为1，并存储在数据框中。\n\n1:10 |&gt;\n  purrr::map(~ tibble(随机数 = rnorm(n = 100, mean = .x, sd = 1)))\n\n[[1]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1  0.663\n 2  0.784\n 3  1.62 \n 4 -0.284\n 5 -0.300\n 6  0.623\n 7  1.10 \n 8  0.296\n 9  2.50 \n10  0.697\n# ℹ 90 more rows\n\n[[2]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1 0.294 \n 2 1.14  \n 3 1.86  \n 4 1.68  \n 5 1.83  \n 6 0.764 \n 7 0.0977\n 8 1.91  \n 9 2.03  \n10 2.46  \n# ℹ 90 more rows\n\n[[3]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   2.09\n 2   6.11\n 3   1.93\n 4   2.30\n 5   2.80\n 6   3.74\n 7   2.95\n 8   4.31\n 9   3.09\n10   2.37\n# ℹ 90 more rows\n\n[[4]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   2.85\n 2   3.73\n 3   4.46\n 4   3.98\n 5   3.46\n 6   4.88\n 7   4.74\n 8   3.84\n 9   3.25\n10   2.75\n# ℹ 90 more rows\n\n[[5]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   3.86\n 2   4.72\n 3   4.11\n 4   5.14\n 5   4.25\n 6   5.52\n 7   4.81\n 8   5.03\n 9   5.36\n10   4.97\n# ℹ 90 more rows\n\n[[6]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   5.42\n 2   5.83\n 3   4.08\n 4   4.47\n 5   4.89\n 6   7.60\n 7   5.36\n 8   7.57\n 9   4.55\n10   5.21\n# ℹ 90 more rows\n\n[[7]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   6.29\n 2   8.48\n 3   7.85\n 4   8.29\n 5   7.30\n 6   6.59\n 7   6.86\n 8   6.78\n 9   8.75\n10   6.92\n# ℹ 90 more rows\n\n[[8]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   8.48\n 2   9.67\n 3   7.96\n 4   7.56\n 5   8.73\n 6   7.42\n 7   8.07\n 8   8.06\n 9   8.85\n10  10.6 \n# ℹ 90 more rows\n\n[[9]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1  10.0 \n 2   9.53\n 3  10.2 \n 4   9.17\n 5   9.58\n 6   8.88\n 7   9.90\n 8   8.98\n 9   8.08\n10   7.94\n# ℹ 90 more rows\n\n[[10]]\n# A tibble: 100 × 1\n   随机数\n    &lt;dbl&gt;\n 1   9.29\n 2   8.64\n 3   9.50\n 4  11.4 \n 5   9.49\n 6  10.00\n 7  11.8 \n 8  11.0 \n 9   9.42\n10   8.41\n# ℹ 90 more rows"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#purrr",
    "href": "SD/3.1_datatransform/index.html#purrr",
    "title": "Data Transform",
    "section": "purrr",
    "text": "purrr\n\nlibrary(purrr)\nmtcars |&gt;\n  split(mtcars$cyl) |&gt; # from base R\n  map(\\(df) lm(mpg ~ wt, data = df)) |&gt;\n  map(summary) %&gt;%\n  map_dbl(\"r.squared\")\n\n        4         6         8 \n0.5086326 0.4645102 0.4229655"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-16",
    "href": "SD/3.1_datatransform/index.html#练习-16",
    "title": "Data Transform",
    "section": "练习：",
    "text": "练习：\n计算每月最后一个周六的航班数：\n\nflights\n\n# A tibble: 336,776 × 19\n    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time\n   &lt;int&gt; &lt;int&gt; &lt;int&gt;    &lt;int&gt;          &lt;int&gt;     &lt;dbl&gt;    &lt;int&gt;          &lt;int&gt;\n 1  2013     1     1      517            515         2      830            819\n 2  2013     1     1      533            529         4      850            830\n 3  2013     1     1      542            540         2      923            850\n 4  2013     1     1      544            545        -1     1004           1022\n 5  2013     1     1      554            600        -6      812            837\n 6  2013     1     1      554            558        -4      740            728\n 7  2013     1     1      555            600        -5      913            854\n 8  2013     1     1      557            600        -3      709            723\n 9  2013     1     1      557            600        -3      838            846\n10  2013     1     1      558            600        -2      753            745\n# ℹ 336,766 more rows\n# ℹ 11 more variables: arr_delay &lt;dbl&gt;, carrier &lt;chr&gt;, flight &lt;int&gt;,\n#   tailnum &lt;chr&gt;, origin &lt;chr&gt;, dest &lt;chr&gt;, air_time &lt;dbl&gt;, distance &lt;dbl&gt;,\n#   hour &lt;dbl&gt;, minute &lt;dbl&gt;, time_hour &lt;dttm&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#tidyr-purrr包",
    "href": "SD/3.1_datatransform/index.html#tidyr-purrr包",
    "title": "Data Transform",
    "section": "tidyr + purrr包",
    "text": "tidyr + purrr包\n任务：展示不同城市间的大气指标散点图\n\n(airqualitydf &lt;- readxl::read_xlsx(\"../../data/airquality.xlsx\", sheet = 2))\n\n# A tibble: 20,088 × 20\n   datetime            site  `CO_mg/m3` `CO_24h_mg/m3` `NO2_μg/m3`\n   &lt;dttm&gt;              &lt;chr&gt;      &lt;dbl&gt;          &lt;dbl&gt;       &lt;dbl&gt;\n 1 2024-03-19 01:00:00 1001A        0.1            0.4           5\n 2 2024-03-19 01:00:00 1003A        0.2            0.4           9\n 3 2024-03-19 01:00:00 1004A        0.2            0.4           4\n 4 2024-03-19 01:00:00 1005A        0.1            0.3           6\n 5 2024-03-19 01:00:00 1006A        0.1            0.4           5\n 6 2024-03-19 01:00:00 1007A        0.3            0.5           6\n 7 2024-03-19 01:00:00 1008A        0.2            0.4           2\n 8 2024-03-19 01:00:00 1009A        0.2            0.4           2\n 9 2024-03-19 01:00:00 1010A        0.1            0.3           2\n10 2024-03-19 01:00:00 1011A        0.2            0.4          12\n# ℹ 20,078 more rows\n# ℹ 15 more variables: `NO2_24h_μg/m3` &lt;dbl&gt;, `O3_μg/m3` &lt;dbl&gt;,\n#   `O3_24h_μg/m3` &lt;lgl&gt;, `O3_8h_μg/m3` &lt;lgl&gt;, `O3_8h_24h_μg/m3` &lt;lgl&gt;,\n#   `PM10_μg/m3` &lt;dbl&gt;, `PM10_24h_μg/m3` &lt;dbl&gt;, `PM2.5_μg/m3` &lt;dbl&gt;,\n#   `PM2.5_24h_μg/m3` &lt;dbl&gt;, `SO2_μg/m3` &lt;dbl&gt;, `SO2_24h_μg/m3` &lt;dbl&gt;,\n#   AQI &lt;dbl&gt;, PrimaryPollutant &lt;chr&gt;, Quality &lt;chr&gt;, Unheathful &lt;chr&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#join",
    "href": "SD/3.1_datatransform/index.html#join",
    "title": "Data Transform",
    "section": "join",
    "text": "join\nPerform left join\n\n(df1 &lt;- data.frame(id = 1:5, value1 = letters[1:5]))\n\n  id value1\n1  1      a\n2  2      b\n3  3      c\n4  4      d\n5  5      e\n\n(df2 &lt;- data.frame(id = c(2, 4, 6), value2 = LETTERS[1:3]))\n\n  id value2\n1  2      A\n2  4      B\n3  6      C\n\nleft_join(df1, df2, by = \"id\")\n\n  id value1 value2\n1  1      a   &lt;NA&gt;\n2  2      b      A\n3  3      c   &lt;NA&gt;\n4  4      d      B\n5  5      e   &lt;NA&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#left-join",
    "href": "SD/3.1_datatransform/index.html#left-join",
    "title": "Data Transform",
    "section": "left join",
    "text": "left join\nCreate sample data frames with non-matching rows\n\n(df1 &lt;- data.frame(id = 1:5, value1 = letters[1:5]))\n\n  id value1\n1  1      a\n2  2      b\n3  3      c\n4  4      d\n5  5      e\n\n(df2 &lt;- data.frame(id = c(2, 4, 6), value2 = LETTERS[1:3]))\n\n  id value2\n1  2      A\n2  4      B\n3  6      C\n\nleft_join(df2, df1, by = \"id\")\n\n  id value2 value1\n1  2      A      b\n2  4      B      d\n3  6      C   &lt;NA&gt;"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#left-join-1",
    "href": "SD/3.1_datatransform/index.html#left-join-1",
    "title": "Data Transform",
    "section": "left join",
    "text": "left join\nCreate sample data frames with multiple columns\n\ndf1 &lt;- data.frame(\n  id1 = c(1, 2, 3),\n  id2 = c(\"A\", \"B\", \"C\"),\n  value1 = letters[1:3]\n)\ndf2 &lt;- data.frame(\n  id1 = c(2, 3, 4),\n  id2 = c(\"B\", \"C\", \"D\"),\n  value2 = LETTERS[1:3]\n)\n# Perform left join\nleft_join(df1, df2, by = c(\"id1\", \"id2\"))\n\n  id1 id2 value1 value2\n1   1   A      a   &lt;NA&gt;\n2   2   B      b      A\n3   3   C      c      B"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#right-join",
    "href": "SD/3.1_datatransform/index.html#right-join",
    "title": "Data Transform",
    "section": "right join",
    "text": "right join\n\n(df1 &lt;- data.frame(id = 1:5, value1 = letters[1:5]))\n\n  id value1\n1  1      a\n2  2      b\n3  3      c\n4  4      d\n5  5      e\n\n(df2 &lt;- data.frame(id = c(2, 4, 6), value2 = LETTERS[1:3]))\n\n  id value2\n1  2      A\n2  4      B\n3  6      C\n\n# Perform right join\nright_join(df1, df2, by = \"id\")\n\n  id value1 value2\n1  2      b      A\n2  4      d      B\n3  6   &lt;NA&gt;      C"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#inner-join",
    "href": "SD/3.1_datatransform/index.html#inner-join",
    "title": "Data Transform",
    "section": "inner join",
    "text": "inner join\n\n# Create sample data frames\n(df1 &lt;- data.frame(id = 1:5, value1 = letters[1:5]))\n\n  id value1\n1  1      a\n2  2      b\n3  3      c\n4  4      d\n5  5      e\n\n(df2 &lt;- data.frame(id = c(2, 4, 6), value2 = LETTERS[1:3]))\n\n  id value2\n1  2      A\n2  4      B\n3  6      C\n\n# Perform inner join\ninner_join(df1, df2, by = \"id\")\n\n  id value1 value2\n1  2      b      A\n2  4      d      B"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#full-join",
    "href": "SD/3.1_datatransform/index.html#full-join",
    "title": "Data Transform",
    "section": "full join",
    "text": "full join\n\n# Create sample data frames\n(df1 &lt;- data.frame(id = 1:5, value1 = letters[1:5]))\n\n  id value1\n1  1      a\n2  2      b\n3  3      c\n4  4      d\n5  5      e\n\n(df2 &lt;- data.frame(id = c(2, 4, 6), value2 = LETTERS[1:3]))\n\n  id value2\n1  2      A\n2  4      B\n3  6      C\n\n# Perform inner join\nfull_join(df1, df2, by = \"id\")\n\n  id value1 value2\n1  1      a   &lt;NA&gt;\n2  2      b      A\n3  3      c   &lt;NA&gt;\n4  4      d      B\n5  5      e   &lt;NA&gt;\n6  6   &lt;NA&gt;      C"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#semi-join",
    "href": "SD/3.1_datatransform/index.html#semi-join",
    "title": "Data Transform",
    "section": "semi join",
    "text": "semi join\nCreate sample data frames\n\n(df1 &lt;- data.frame(id = 1:5, value1 = letters[1:5]))\n\n  id value1\n1  1      a\n2  2      b\n3  3      c\n4  4      d\n5  5      e\n\n(df2 &lt;- data.frame(id = c(2, 4, 6), value2 = LETTERS[1:3]))\n\n  id value2\n1  2      A\n2  4      B\n3  6      C\n\n# Perform semi join\nsemi_join(df1, df2, by = \"id\")\n\n  id value1\n1  2      b\n2  4      d"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-17",
    "href": "SD/3.1_datatransform/index.html#练习-17",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n合并airquality.xlsx中的数据。"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#练习-18",
    "href": "SD/3.1_datatransform/index.html#练习-18",
    "title": "Data Transform",
    "section": "练习",
    "text": "练习\n统计各城市白天与晚上的大气质量差异，计算不同指标差异最大的10个城市。"
  },
  {
    "objectID": "SD/3.1_datatransform/index.html#欢迎讨论",
    "href": "SD/3.1_datatransform/index.html#欢迎讨论",
    "title": "Data Transform",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#the-ggplot2-package",
    "href": "SD/4.1_datavisualize/index.html#the-ggplot2-package",
    "title": "数据可视化",
    "section": "The ggplot2 Package",
    "text": "The ggplot2 Package\n\n… is an R package to visualize data created by Hadley Wickham in 2005\n\n# install.packages(\"ggplot2\")\nlibrary(ggplot2)\n\n\n\n… is part of the {tidyverse}\n\n# install.packages(\"tidyverse\")\nlibrary(tidyverse)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#the-grammar-of-ggplot2-1",
    "href": "SD/4.1_datavisualize/index.html#the-grammar-of-ggplot2-1",
    "title": "数据可视化",
    "section": "The Grammar of {ggplot2}",
    "text": "The Grammar of {ggplot2}\n\n\n\n\nComponent\n\n\nFunction\n\n\nExplanation\n\n\n\n\nData\n\n\nggplot(data)         \n\n\nThe raw data that you want to visualise.\n\n\n\n\nAesthetics          \n\n\naes()\n\n\nAesthetic mappings between variables and visual properties.\n\n\n\nGeometries\n\n\ngeom_*()\n\n\nThe geometric shapes representing the data."
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#the-grammar-of-ggplot2-2",
    "href": "SD/4.1_datavisualize/index.html#the-grammar-of-ggplot2-2",
    "title": "数据可视化",
    "section": "The Grammar of {ggplot2}",
    "text": "The Grammar of {ggplot2}\n\n\n\n\nComponent\n\n\nFunction\n\n\nExplanation\n\n\n\n\nData\n\n\nggplot(data)         \n\n\nThe raw data that you want to visualise.\n\n\n\n\nAesthetics          \n\n\naes()\n\n\nAesthetic mappings between variables and visual properties.\n\n\n\nGeometries\n\n\ngeom_*()\n\n\nThe geometric shapes representing the data.\n\n\n\n\nStatistics\n\n\nstat_*()\n\n\nThe statistical transformations applied to the data.\n\n\n\n\nScales\n\n\nscale_*()\n\n\nMaps between the data and the aesthetic dimensions.\n\n\n\n\nCoordinate System\n\n\ncoord_*()\n\n\nMaps data into the plane of the data rectangle.\n\n\n\n\nFacets\n\n\nfacet_*()\n\n\nThe arrangement of the data into a grid of plots.\n\n\n\n\nVisual Themes\n\n\ntheme() / theme_*()\n\n\nThe overall visual defaults of a plot."
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#the-data",
    "href": "SD/4.1_datavisualize/index.html#the-data",
    "title": "数据可视化",
    "section": "The Data",
    "text": "The Data\nBike sharing counts in London, UK, powered by TfL Open Data\n\ncovers the years 2015 and 2016\nincl. weather data acquired from freemeteo.com\nprepared by Hristo Mavrodiev for Kaggle\n\n\n\n\nbikes &lt;- readr::read_csv(\n  \"../../data/ggplot2/london-bikes-custom.csv\",\n  ## or: \"https://raw.githubusercontent.com/z3tt/graphic-design-ggplot2/main/data/london-bikes-custom.csv\"\n  col_types = \"Dcfffilllddddc\"\n)\n\nbikes$season &lt;- forcats::fct_inorder(bikes$season)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#ggplot2ggplot",
    "href": "SD/4.1_datavisualize/index.html#ggplot2ggplot",
    "title": "数据可视化",
    "section": "ggplot2::ggplot()",
    "text": "ggplot2::ggplot()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#data",
    "href": "SD/4.1_datavisualize/index.html#data",
    "title": "数据可视化",
    "section": "Data",
    "text": "Data\n\n\nggplot(data = bikes)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#aesthetic-mapping视觉映射aes.",
    "href": "SD/4.1_datavisualize/index.html#aesthetic-mapping视觉映射aes.",
    "title": "数据可视化",
    "section": "Aesthetic Mapping（视觉映射）：aes(.)",
    "text": "Aesthetic Mapping（视觉映射）：aes(.)\n\n= link variables to graphical properties\n\npositions (x, y)\ncolors (color, fill)\nshapes (shape, linetype)\nsize (size)\ntransparency (alpha)\ngroupings (group)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#aesthetic-mapping视觉映射aes.-1",
    "href": "SD/4.1_datavisualize/index.html#aesthetic-mapping视觉映射aes.-1",
    "title": "数据可视化",
    "section": "Aesthetic Mapping（视觉映射）：aes(.)",
    "text": "Aesthetic Mapping（视觉映射）：aes(.)\n\n\nggplot(data = bikes) +\n  aes(x = temp_feel, y = count)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#aesthetics",
    "href": "SD/4.1_datavisualize/index.html#aesthetics",
    "title": "数据可视化",
    "section": "aesthetics",
    "text": "aesthetics\naes() outside as component\n\nggplot(data = bikes) +\n  aes(x = temp_feel, y = count)\n\n\n\naes() inside, explicit matching\n\nggplot(data = bikes, mapping = aes(x = temp_feel, y = count))\n\n\n\n\naes() inside, implicit matching\n\nggplot(bikes, aes(temp_feel, count))\n\n\n\n\naes() inside, mixed matching\n\nggplot(bikes, aes(x = temp_feel, y = count))"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#geometries几何图层geom_",
    "href": "SD/4.1_datavisualize/index.html#geometries几何图层geom_",
    "title": "数据可视化",
    "section": "Geometries（几何图层）：geom_*",
    "text": "Geometries（几何图层）：geom_*\n\n= interpret aesthetics as graphical representations\n\npoints\nlines\npolygons\ntext labels\n…"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#geometries几何图层geom_-1",
    "href": "SD/4.1_datavisualize/index.html#geometries几何图层geom_-1",
    "title": "数据可视化",
    "section": "Geometries（几何图层）：geom_*",
    "text": "Geometries（几何图层）：geom_*\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#visual-properties-of-layers图层属性",
    "href": "SD/4.1_datavisualize/index.html#visual-properties-of-layers图层属性",
    "title": "数据可视化",
    "section": "Visual Properties of Layers（图层属性）",
    "text": "Visual Properties of Layers（图层属性）\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point(\n    color = \"#28a87d\",\n    alpha = .5,\n    shape = \"X\",\n    stroke = 1,\n    size = 4\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#setting-vs-mapping-of-visual-properties",
    "href": "SD/4.1_datavisualize/index.html#setting-vs-mapping-of-visual-properties",
    "title": "数据可视化",
    "section": "Setting vs Mapping of Visual Properties",
    "text": "Setting vs Mapping of Visual Properties\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point(\n    color = \"#28a87d\",\n    alpha = .5\n  )\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point(\n    aes(color = season),\n    alpha = .5\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#mapping-expressions",
    "href": "SD/4.1_datavisualize/index.html#mapping-expressions",
    "title": "数据可视化",
    "section": "Mapping Expressions",
    "text": "Mapping Expressions\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point(\n    aes(color = temp_feel &gt; 20),\n    alpha = .5\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#filter-data",
    "href": "SD/4.1_datavisualize/index.html#filter-data",
    "title": "数据可视化",
    "section": "Filter Data",
    "text": "Filter Data\n\n\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = temp, y = temp_feel)\n) +\n  geom_point(\n    aes(color = weather_type == \"clear\", size = count),\n    shape = 18,\n    alpha = .5\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#filter-data-1",
    "href": "SD/4.1_datavisualize/index.html#filter-data-1",
    "title": "数据可视化",
    "section": "Filter Data",
    "text": "Filter Data\n\n\nggplot(\n  bikes %&gt;% filter(!is.na(weather_type)),\n  aes(x = temp, y = temp_feel)\n) +\n  geom_point(\n    aes(color = weather_type == \"clear\", size = count),\n    shape = 18,\n    alpha = .5\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#local-vs.-global应用至当前图层或所有图层",
    "href": "SD/4.1_datavisualize/index.html#local-vs.-global应用至当前图层或所有图层",
    "title": "数据可视化",
    "section": "Local vs. Global（应用至当前图层或所有图层）",
    "text": "Local vs. Global（应用至当前图层或所有图层）\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point(\n    aes(color = season),\n    alpha = .5\n  )\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count, color = season)\n) +\n  geom_point(\n    alpha = .5\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#adding-more-layers",
    "href": "SD/4.1_datavisualize/index.html#adding-more-layers",
    "title": "数据可视化",
    "section": "Adding More Layers",
    "text": "Adding More Layers\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count, color = season)\n) +\n  geom_point(\n    alpha = .5\n  ) +\n  geom_smooth(\n    method = \"lm\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#global-color-encoding",
    "href": "SD/4.1_datavisualize/index.html#global-color-encoding",
    "title": "数据可视化",
    "section": "Global Color Encoding",
    "text": "Global Color Encoding\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count, color = season)\n) +\n  geom_point(\n    alpha = .5\n  ) +\n  geom_smooth(\n    method = \"lm\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#local-color-encoding",
    "href": "SD/4.1_datavisualize/index.html#local-color-encoding",
    "title": "数据可视化",
    "section": "Local Color Encoding",
    "text": "Local Color Encoding\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point(\n    aes(color = season),\n    alpha = .5\n  ) +\n  geom_smooth(\n    method = \"lm\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#the-group-aesthetic",
    "href": "SD/4.1_datavisualize/index.html#the-group-aesthetic",
    "title": "数据可视化",
    "section": "The `group` Aesthetic",
    "text": "The `group` Aesthetic\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point(\n    aes(color = season),\n    alpha = .5\n  ) +\n  geom_smooth(\n    aes(group = day_night),\n    method = \"lm\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#set-both-as-global-aesthetics",
    "href": "SD/4.1_datavisualize/index.html#set-both-as-global-aesthetics",
    "title": "数据可视化",
    "section": "Set Both as Global Aesthetics",
    "text": "Set Both as Global Aesthetics\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count, color = season, group = day_night)\n) +\n  geom_point(\n    alpha = .5\n  ) +\n  geom_smooth(\n    method = \"lm\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#overwrite-global-aesthetics",
    "href": "SD/4.1_datavisualize/index.html#overwrite-global-aesthetics",
    "title": "数据可视化",
    "section": "Overwrite Global Aesthetics",
    "text": "Overwrite Global Aesthetics\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count, color = season, group = day_night)\n) +\n  geom_point(\n    alpha = .5\n  ) +\n  geom_smooth(\n    method = \"lm\",\n    color = \"black\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#stat_-and-geom_",
    "href": "SD/4.1_datavisualize/index.html#stat_-and-geom_",
    "title": "数据可视化",
    "section": "`stat_*()` and `geom_*()`",
    "text": "`stat_*()` and `geom_*()`\nggplot(bikes, aes(x = temp_feel, y = count)) +\n  stat_smooth(geom = \"smooth\")\nggplot(bikes, aes(x = temp_feel, y = count)) +\n  geom_smooth(stat = \"smooth\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#stat_-and-geom_-1",
    "href": "SD/4.1_datavisualize/index.html#stat_-and-geom_-1",
    "title": "数据可视化",
    "section": "`stat_*()` and `geom_*()`",
    "text": "`stat_*()` and `geom_*()`\nggplot(bikes, aes(x = season)) +\n  stat_count(geom = \"bar\")\nggplot(bikes, aes(x = season)) +\n  geom_bar(stat = \"count\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#stat_-and-geom_-2",
    "href": "SD/4.1_datavisualize/index.html#stat_-and-geom_-2",
    "title": "数据可视化",
    "section": "`stat_*()` and `geom_*()`",
    "text": "`stat_*()` and `geom_*()`\nggplot(bikes, aes(x = date, y = temp_feel)) +\n  stat_identity(geom = \"point\")\nggplot(bikes, aes(x = date, y = temp_feel)) +\n  geom_point(stat = \"identity\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#statistical-summaries",
    "href": "SD/4.1_datavisualize/index.html#statistical-summaries",
    "title": "数据可视化",
    "section": "Statistical Summaries",
    "text": "Statistical Summaries\n\n\nggplot(\n  bikes,\n  aes(x = season, y = temp_feel)\n) +\n  stat_summary()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#statistical-summaries-1",
    "href": "SD/4.1_datavisualize/index.html#statistical-summaries-1",
    "title": "数据可视化",
    "section": "Statistical Summaries",
    "text": "Statistical Summaries\n\n\nggplot(\n  bikes,\n  aes(x = season, y = temp_feel)\n) +\n  stat_summary(\n    fun.data = mean_se, ## the default\n    geom = \"pointrange\" ## the default\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#statistical-summaries-2",
    "href": "SD/4.1_datavisualize/index.html#statistical-summaries-2",
    "title": "数据可视化",
    "section": "Statistical Summaries",
    "text": "Statistical Summaries\n\n\nggplot(\n  bikes,\n  aes(x = season, y = temp_feel)\n) +\n  geom_boxplot() +\n  stat_summary(\n    fun = mean,\n    geom = \"point\",\n    color = \"#28a87d\",\n    size = 3\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#statistical-summaries-3",
    "href": "SD/4.1_datavisualize/index.html#statistical-summaries-3",
    "title": "数据可视化",
    "section": "Statistical Summaries",
    "text": "Statistical Summaries\n\n\nggplot(\n  bikes,\n  aes(x = season, y = temp_feel)\n) +\n  stat_summary(\n    fun = mean,\n    fun.max = function(y) mean(y) + sd(y),\n    fun.min = function(y) mean(y) - sd(y)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#store-a-ggplot-as-object",
    "href": "SD/4.1_datavisualize/index.html#store-a-ggplot-as-object",
    "title": "数据可视化",
    "section": "Store a ggplot as Object",
    "text": "Store a ggplot as Object\n\ng &lt;-\n  ggplot(\n    bikes,\n    aes(x = temp_feel, y = count, color = season, group = day_night)\n  ) +\n  geom_point(\n    alpha = .5\n  ) +\n  geom_smooth(\n    method = \"lm\",\n    color = \"black\"\n  )\n\nclass(g)\n\n[1] \"ggplot2::ggplot\" \"ggplot\"          \"ggplot2::gg\"     \"S7_object\"      \n[5] \"gg\""
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#inspect-a-ggplot-object",
    "href": "SD/4.1_datavisualize/index.html#inspect-a-ggplot-object",
    "title": "数据可视化",
    "section": "Inspect a ggplot Object",
    "text": "Inspect a ggplot Object\n\ng$data\n\n# A tibble: 1,454 × 14\n   date       day_night year  month season count is_workday is_weekend\n   &lt;date&gt;     &lt;chr&gt;     &lt;fct&gt; &lt;fct&gt; &lt;fct&gt;  &lt;int&gt; &lt;lgl&gt;      &lt;lgl&gt;     \n 1 2015-01-04 day       2015  1     winter  6830 FALSE      TRUE      \n 2 2015-01-04 night     2015  1     winter  2404 FALSE      TRUE      \n 3 2015-01-05 day       2015  1     winter 14763 TRUE       FALSE     \n 4 2015-01-05 night     2015  1     winter  5609 TRUE       FALSE     \n 5 2015-01-06 day       2015  1     winter 14501 TRUE       FALSE     \n 6 2015-01-06 night     2015  1     winter  6112 TRUE       FALSE     \n 7 2015-01-07 day       2015  1     winter 16358 TRUE       FALSE     \n 8 2015-01-07 night     2015  1     winter  4706 TRUE       FALSE     \n 9 2015-01-08 day       2015  1     winter  9971 TRUE       FALSE     \n10 2015-01-08 night     2015  1     winter  5630 TRUE       FALSE     \n# ℹ 1,444 more rows\n# ℹ 6 more variables: is_holiday &lt;lgl&gt;, temp &lt;dbl&gt;, temp_feel &lt;dbl&gt;,\n#   humidity &lt;dbl&gt;, wind_speed &lt;dbl&gt;, weather_type &lt;chr&gt;"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#inspect-a-ggplot-object-1",
    "href": "SD/4.1_datavisualize/index.html#inspect-a-ggplot-object-1",
    "title": "数据可视化",
    "section": "Inspect a ggplot Object",
    "text": "Inspect a ggplot Object\n\ng$mapping\n\nAesthetic mapping: \n* `x`      -&gt; `temp_feel`\n* `y`      -&gt; `count`\n* `colour` -&gt; `season`\n* `group`  -&gt; `day_night`"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-layers",
    "href": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-layers",
    "title": "数据可视化",
    "section": "Extend a ggplot Object: Add Layers",
    "text": "Extend a ggplot Object: Add Layers\n\n\ng +\n  geom_rug(\n    alpha = .2\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#remove-a-layer-from-the-legend",
    "href": "SD/4.1_datavisualize/index.html#remove-a-layer-from-the-legend",
    "title": "数据可视化",
    "section": "Remove a Layer from the Legend",
    "text": "Remove a Layer from the Legend\n\n\ng +\n  geom_rug(\n    alpha = .2,\n    show.legend = FALSE\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels",
    "href": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels",
    "title": "数据可视化",
    "section": "Extend a ggplot Object: Add Labels",
    "text": "Extend a ggplot Object: Add Labels\n\n\ng +\n  xlab(\"Feels-like temperature (°F)\") +\n  ylab(\"Reported bike shares\") +\n  ggtitle(\"TfL bike sharing trends\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-1",
    "href": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-1",
    "title": "数据可视化",
    "section": "Extend a ggplot Object: Add Labels",
    "text": "Extend a ggplot Object: Add Labels\n\n\ng +\n  labs(\n    x = \"Feels-like temperature (°F)\",\n    y = \"Reported bike shares\",\n    title = \"TfL bike sharing trends\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-2",
    "href": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-2",
    "title": "数据可视化",
    "section": "Extend a ggplot Object: Add Labels",
    "text": "Extend a ggplot Object: Add Labels\n\n\ng &lt;- g +\n  labs(\n    x = \"Feels-like temperature (°F)\",\n    y = \"Reported bike shares\",\n    title = \"TfL bike sharing trends\",\n    color = \"Season:\"\n  )\n\ng"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-3",
    "href": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-3",
    "title": "数据可视化",
    "section": "Extend a ggplot Object: Add Labels",
    "text": "Extend a ggplot Object: Add Labels\n\n\ng +\n  labs(\n    x = \"Feels-like temperature (°F)\",\n    y = \"Reported bike shares\",\n    title = \"TfL bike sharing trends\",\n    subtitle = \"Reported bike rents versus feels-like temperature in London\",\n    caption = \"Data: TfL\",\n    color = \"Season:\",\n    tag = \"Fig. 1\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-4",
    "href": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-add-labels-4",
    "title": "数据可视化",
    "section": "Extend a ggplot Object: Add Labels",
    "text": "Extend a ggplot Object: Add Labels\ng +\n  labs(\n    x = \"\",\n    caption = \"Data: TfL\"\n  )\ng +\n  labs(\n    x = NULL,\n    caption = \"Data: TfL\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-themes",
    "href": "SD/4.1_datavisualize/index.html#extend-a-ggplot-object-themes",
    "title": "数据可视化",
    "section": "Extend a ggplot Object: Themes",
    "text": "Extend a ggplot Object: Themes\ng + theme_light()\ng + theme_minimal()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#change-the-theme-base-settings",
    "href": "SD/4.1_datavisualize/index.html#change-the-theme-base-settings",
    "title": "数据可视化",
    "section": "Change the Theme Base Settings",
    "text": "Change the Theme Base Settings\n\n\ng +\n  theme_light(\n    base_size = 14\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#set-a-theme-globally",
    "href": "SD/4.1_datavisualize/index.html#set-a-theme-globally",
    "title": "数据可视化",
    "section": "Set a Theme Globally",
    "text": "Set a Theme Globally\n\n\ntheme_set(theme_light())\n\ng"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#change-the-theme-base-settings-1",
    "href": "SD/4.1_datavisualize/index.html#change-the-theme-base-settings-1",
    "title": "数据可视化",
    "section": "Change the Theme Base Settings",
    "text": "Change the Theme Base Settings\n\n\ntheme_set(theme_light(\n  base_size = 14\n))\n\ng"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings",
    "href": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings",
    "title": "数据可视化",
    "section": "Overwrite Specific Theme Settings",
    "text": "Overwrite Specific Theme Settings\n\n\ng +\n  theme(\n    panel.grid.minor = element_blank()\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-1",
    "href": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-1",
    "title": "数据可视化",
    "section": "Overwrite Specific Theme Settings",
    "text": "Overwrite Specific Theme Settings\n\n\ng +\n  theme(\n    panel.grid.minor = element_blank(),\n    plot.title = element_text(face = \"bold\")\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-2",
    "href": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-2",
    "title": "数据可视化",
    "section": "Overwrite Specific Theme Settings",
    "text": "Overwrite Specific Theme Settings\n\n\ng +\n  theme(\n    panel.grid.minor = element_blank(),\n    plot.title = element_text(face = \"bold\"),\n    legend.position = \"top\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-3",
    "href": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-3",
    "title": "数据可视化",
    "section": "Overwrite Specific Theme Settings",
    "text": "Overwrite Specific Theme Settings\n\n\ng +\n  theme(\n    panel.grid.minor = element_blank(),\n    plot.title = element_text(face = \"bold\"),\n    legend.position = \"none\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-4",
    "href": "SD/4.1_datavisualize/index.html#overwrite-specific-theme-settings-4",
    "title": "数据可视化",
    "section": "Overwrite Specific Theme Settings",
    "text": "Overwrite Specific Theme Settings\n\n\ng +\n  theme(\n    panel.grid.minor = element_blank(),\n    plot.title = element_text(face = \"bold\"),\n    legend.position = \"top\",\n    plot.title.position = \"plot\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#overwrite-theme-settings-globally",
    "href": "SD/4.1_datavisualize/index.html#overwrite-theme-settings-globally",
    "title": "数据可视化",
    "section": "Overwrite Theme Settings Globally",
    "text": "Overwrite Theme Settings Globally\n\n\ntheme_update(\n  panel.grid.minor = element_blank(),\n  plot.title = element_text(face = \"bold\"),\n  legend.position = \"top\",\n  plot.title.position = \"plot\"\n)\n\ng"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#save-the-graphic",
    "href": "SD/4.1_datavisualize/index.html#save-the-graphic",
    "title": "数据可视化",
    "section": "Save the Graphic",
    "text": "Save the Graphic\n\nggsave(g, filename = \"my_plot.png\")\n\n\n\nggsave(\"my_plot.png\")\n\n\n\n\nggsave(\"my_plot.png\", width = 8, height = 5, dpi = 600)\n\n\n\n\nggsave(\"my_plot.pdf\", width = 20, height = 12, unit = \"cm\", device = cairo_pdf)\n\n\n\n\ngrDevices::cairo_pdf(\"my_plot.pdf\", width = 10, height = 7)\ng\ndev.off()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facets面-1",
    "href": "SD/4.1_datavisualize/index.html#facets面-1",
    "title": "数据可视化",
    "section": "Facets（面）",
    "text": "Facets（面）\n\n= split variables to multiple panels\n\nFacets are also known as:\n\nsmall multiples\ntrellis graphs\nlattice plots\nconditioning"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#setup",
    "href": "SD/4.1_datavisualize/index.html#setup",
    "title": "数据可视化",
    "section": "Setup",
    "text": "Setup\n\n\ng &lt;-\n  ggplot(\n    bikes,\n    aes(x = temp_feel, y = count, color = season)\n  ) +\n  geom_point(\n    alpha = .3,\n    guide = \"none\"\n  )\n\ng"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#wrapped-facets",
    "href": "SD/4.1_datavisualize/index.html#wrapped-facets",
    "title": "数据可视化",
    "section": "Wrapped Facets",
    "text": "Wrapped Facets\n\n\ng +\n  facet_wrap(\n    vars(day_night)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#wrapped-facets-1",
    "href": "SD/4.1_datavisualize/index.html#wrapped-facets-1",
    "title": "数据可视化",
    "section": "Wrapped Facets",
    "text": "Wrapped Facets\n\n\ng +\n  facet_wrap(\n    ~day_night\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-multiple-variables",
    "href": "SD/4.1_datavisualize/index.html#facet-multiple-variables",
    "title": "数据可视化",
    "section": "Facet Multiple Variables",
    "text": "Facet Multiple Variables\n\n\ng +\n  facet_wrap(\n    ~ is_workday + day_night\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-cols-rows",
    "href": "SD/4.1_datavisualize/index.html#facet-options-cols-rows",
    "title": "数据可视化",
    "section": "Facet Options: Cols + Rows",
    "text": "Facet Options: Cols + Rows\n\n\ng +\n  facet_wrap(\n    ~day_night,\n    ncol = 1\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-free-scaling",
    "href": "SD/4.1_datavisualize/index.html#facet-options-free-scaling",
    "title": "数据可视化",
    "section": "Facet Options: Free Scaling",
    "text": "Facet Options: Free Scaling\n\n\ng +\n  facet_wrap(\n    ~day_night,\n    ncol = 1,\n    scales = \"free\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-free-scaling-1",
    "href": "SD/4.1_datavisualize/index.html#facet-options-free-scaling-1",
    "title": "数据可视化",
    "section": "Facet Options: Free Scaling",
    "text": "Facet Options: Free Scaling\n\n\ng +\n  facet_wrap(\n    ~day_night,\n    ncol = 1,\n    scales = \"free_y\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-switch-labels",
    "href": "SD/4.1_datavisualize/index.html#facet-options-switch-labels",
    "title": "数据可视化",
    "section": "Facet Options: Switch Labels",
    "text": "Facet Options: Switch Labels\n\n\ng +\n  facet_wrap(\n    ~day_night,\n    ncol = 1\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#gridded-facets",
    "href": "SD/4.1_datavisualize/index.html#gridded-facets",
    "title": "数据可视化",
    "section": "Gridded Facets",
    "text": "Gridded Facets\n\n\ng +\n  facet_grid(\n    rows = vars(day_night),\n    cols = vars(is_workday)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#gridded-facets-1",
    "href": "SD/4.1_datavisualize/index.html#gridded-facets-1",
    "title": "数据可视化",
    "section": "Gridded Facets",
    "text": "Gridded Facets\n\n\ng +\n  facet_grid(\n    day_night ~ is_workday\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-multiple-variables-1",
    "href": "SD/4.1_datavisualize/index.html#facet-multiple-variables-1",
    "title": "数据可视化",
    "section": "Facet Multiple Variables",
    "text": "Facet Multiple Variables\n\n\ng +\n  facet_grid(\n    day_night ~ is_workday + season\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-free-scaling-2",
    "href": "SD/4.1_datavisualize/index.html#facet-options-free-scaling-2",
    "title": "数据可视化",
    "section": "Facet Options: Free Scaling",
    "text": "Facet Options: Free Scaling\n\n\ng +\n  facet_grid(\n    day_night ~ is_workday,\n    scales = \"free\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-switch-labels-1",
    "href": "SD/4.1_datavisualize/index.html#facet-options-switch-labels-1",
    "title": "数据可视化",
    "section": "Facet Options: Switch Labels",
    "text": "Facet Options: Switch Labels\n\n\ng +\n  facet_grid(\n    day_night ~ is_workday,\n    scales = \"free\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-proportional-spacing",
    "href": "SD/4.1_datavisualize/index.html#facet-options-proportional-spacing",
    "title": "数据可视化",
    "section": "Facet Options: Proportional Spacing",
    "text": "Facet Options: Proportional Spacing\n\n\ng +\n  facet_grid(\n    day_night ~ is_workday,\n    scales = \"free\",\n    space = \"free\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#facet-options-proportional-spacing-1",
    "href": "SD/4.1_datavisualize/index.html#facet-options-proportional-spacing-1",
    "title": "数据可视化",
    "section": "Facet Options: Proportional Spacing",
    "text": "Facet Options: Proportional Spacing\n\n\ng +\n  facet_grid(\n    day_night ~ is_workday,\n    scales = \"free_y\",\n    space = \"free_y\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nggplot(\n  diamonds,\n  aes(x = carat, y = price)\n) +\n  geom_point(\n    alpha = .3\n  ) +\n  geom_smooth(\n    method = \"lm\",\n    se = FALSE,\n    color = \"dodgerblue\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-1",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-1",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nggplot(\n  diamonds,\n  aes(x = carat, y = price)\n) +\n  geom_point(\n    alpha = .3\n  ) +\n  geom_smooth(\n    method = \"lm\",\n    se = FALSE,\n    color = \"dodgerblue\"\n  ) +\n  facet_grid(\n    cut ~ clarity,\n    space = \"free_x\",\n    scales = \"free_x\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-dark-theme-bonus",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-dark-theme-bonus",
    "title": "数据可视化",
    "section": "Diamonds Facet (Dark Theme Bonus)",
    "text": "Diamonds Facet (Dark Theme Bonus)\n\n\nggplot(\n  diamonds,\n  aes(x = carat, y = price)\n) +\n  geom_point(\n    alpha = .3,\n    color = \"white\"\n  ) +\n  geom_smooth(\n    method = \"lm\",\n    se = FALSE,\n    color = \"dodgerblue\"\n  ) +\n  facet_grid(\n    cut ~ clarity,\n    space = \"free_x\",\n    scales = \"free_x\"\n  ) +\n  theme_dark(\n    base_size = 14\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scales",
    "href": "SD/4.1_datavisualize/index.html#scales",
    "title": "数据可视化",
    "section": "Scales",
    "text": "Scales\n\n= translate between variable ranges and property ranges\n\nfeels-like temperature  ⇄  x\nreported bike shares  ⇄  y\nseason  ⇄  color\nyear  ⇄  shape\n…"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scales-1",
    "href": "SD/4.1_datavisualize/index.html#scales-1",
    "title": "数据可视化",
    "section": "Scales",
    "text": "Scales\nThe scale_*() components control the properties of all theaesthetic dimensions mapped to the data.\nConsequently, there are scale_*() functions for all aesthetics such as:\n\npositions via scale_x_*() and scale_y_*()\ncolors via scale_color_*() and scale_fill_*()\nsizes via scale_size_*() and scale_radius_*()\nshapes via scale_shape_*() and scale_linetype_*()\ntransparency via scale_alpha_*()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scales-2",
    "href": "SD/4.1_datavisualize/index.html#scales-2",
    "title": "数据可视化",
    "section": "Scales",
    "text": "Scales\nThe scale_*() components control the properties of all theaesthetic dimensions mapped to the data.\nThe extensions (*) can be filled by e.g.:\n\ncontinuous(), discrete(), reverse(), log10(), sqrt(), date() for positions\ncontinuous(), discrete(), manual(), gradient(), gradient2(), brewer() for colors\ncontinuous(), discrete(), manual(), ordinal(), area(), date() for sizes\ncontinuous(), discrete(), manual(), ordinal() for shapes\ncontinuous(), discrete(), manual(), ordinal(), date() for transparency"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#continuous-vs.-discrete-in-ggplot2",
    "href": "SD/4.1_datavisualize/index.html#continuous-vs.-discrete-in-ggplot2",
    "title": "数据可视化",
    "section": "Continuous vs. Discrete in {ggplot2}",
    "text": "Continuous vs. Discrete in {ggplot2}\n\n\n\nContinuous:quantitative or numerical data\n\nheight\nweight\nage\ncounts\n\n\n\nDiscrete:qualitative or categorical data\n\nspecies\nsex\nstudy sites\nage group"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#continuous-vs.-discrete-in-ggplot2-1",
    "href": "SD/4.1_datavisualize/index.html#continuous-vs.-discrete-in-ggplot2-1",
    "title": "数据可视化",
    "section": "Continuous vs. Discrete in {ggplot2}",
    "text": "Continuous vs. Discrete in {ggplot2}\n\n\n\nContinuous:quantitative or numerical data\n\nheight (continuous)\nweight (continuous)\nage (continuous or discrete)\ncounts (discrete)\n\n\n\nDiscrete:qualitative or categorical data\n\nspecies (nominal)\nsex (nominal)\nstudy site (nominal or ordinal)\nage group (ordinal)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#aesthetics-scales",
    "href": "SD/4.1_datavisualize/index.html#aesthetics-scales",
    "title": "数据可视化",
    "section": "Aesthetics + Scales",
    "text": "Aesthetics + Scales\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#aesthetics-scales-1",
    "href": "SD/4.1_datavisualize/index.html#aesthetics-scales-1",
    "title": "数据可视化",
    "section": "Aesthetics + Scales",
    "text": "Aesthetics + Scales\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_date() +\n  scale_y_continuous() +\n  scale_color_discrete()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scales-3",
    "href": "SD/4.1_datavisualize/index.html#scales-3",
    "title": "数据可视化",
    "section": "Scales",
    "text": "Scales\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_continuous() +\n  scale_y_continuous() +\n  scale_color_discrete()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scales-4",
    "href": "SD/4.1_datavisualize/index.html#scales-4",
    "title": "数据可视化",
    "section": "Scales",
    "text": "Scales\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_continuous() +\n  scale_y_log10() +\n  scale_color_discrete()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scales-5",
    "href": "SD/4.1_datavisualize/index.html#scales-5",
    "title": "数据可视化",
    "section": "Scales",
    "text": "Scales\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_continuous() +\n  scale_y_log10() +\n  scale_color_viridis_d()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    trans = \"log10\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-1",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-1",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-2",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-2",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = seq(0, 60000, by = 15000)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-3",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-3",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = 0:4 * 15000\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-4",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-4",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = c(0, 2:12 * 2500, 40000, 50000)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-5",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-5",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares in thousands\",\n    breaks = 0:4 * 15000,\n    labels = 0:4 * 15\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-6",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-6",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares in thousands\",\n    breaks = 0:4 * 15000,\n    labels = paste(0:4 * 15000, \"bikes\")\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-7",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-7",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = 0:4 * 15000,\n    limits = c(NA, 60000)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-8",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-8",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = 0:4 * 15000,\n    expand = c(0, 0)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-9",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-9",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = -1:5 * 15000,\n    expand = c(.5, .5) ## c(add, mult)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-10",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-10",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = -1:5 * 15000,\n    expand = expansion(add = 2000)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_continuous-11",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_continuous-11",
    "title": "数据可视化",
    "section": "`scale_x|y_continuous`",
    "text": "`scale_x|y_continuous`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_y_continuous(\n    name = \"Reported bike shares\",\n    breaks = 0:4 * 15000,\n    guide = \"none\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_date",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_date",
    "title": "数据可视化",
    "section": "`scale_x|y_date`",
    "text": "`scale_x|y_date`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_date(\n    name = NULL,\n    date_breaks = \"4 months\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_date-1",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_date-1",
    "title": "数据可视化",
    "section": "`scale_x|y_date`",
    "text": "`scale_x|y_date`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_date(\n    name = NULL,\n    date_breaks = \"20 weeks\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_date-with-strftime",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_date-with-strftime",
    "title": "数据可视化",
    "section": "`scale_x|y_date` with `strftime()`",
    "text": "`scale_x|y_date` with `strftime()`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_date(\n    name = NULL,\n    date_breaks = \"6 months\",\n    date_labels = \"%Y/%m/%d\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_date-with-strftime-1",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_date-with-strftime-1",
    "title": "数据可视化",
    "section": "`scale_x|y_date` with `strftime()`",
    "text": "`scale_x|y_date` with `strftime()`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_x_date(\n    name = NULL,\n    date_breaks = \"6 months\",\n    date_labels = \"%b '%y\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_discrete",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_discrete",
    "title": "数据可视化",
    "section": "`scale_x|y_discrete`",
    "text": "`scale_x|y_discrete`\n\n\nggplot(\n  bikes,\n  aes(x = season, y = count)\n) +\n  geom_boxplot() +\n  scale_x_discrete(\n    name = \"Period\",\n    labels = c(\"Dec-Feb\", \"Mar-May\", \"Jun-Aug\", \"Sep-Nov\")\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_xy_discrete-1",
    "href": "SD/4.1_datavisualize/index.html#scale_xy_discrete-1",
    "title": "数据可视化",
    "section": "`scale_x|y_discrete`",
    "text": "`scale_x|y_discrete`\n\n\nggplot(\n  bikes,\n  aes(x = season, y = count)\n) +\n  geom_boxplot() +\n  scale_x_discrete(\n    name = \"Season\",\n    expand = c(.5, 0) ## add, mult\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#discrete-or-continuous",
    "href": "SD/4.1_datavisualize/index.html#discrete-or-continuous",
    "title": "数据可视化",
    "section": "Discrete or Continuous?",
    "text": "Discrete or Continuous?\n\n\nggplot(\n  bikes,\n  aes(x = as.numeric(season), y = count)\n) +\n  geom_boxplot(\n    aes(group = season)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#discrete-or-continuous-1",
    "href": "SD/4.1_datavisualize/index.html#discrete-or-continuous-1",
    "title": "数据可视化",
    "section": "Discrete or Continuous?",
    "text": "Discrete or Continuous?\n\n\nggplot(\n  bikes,\n  aes(x = as.numeric(season), y = count)\n) +\n  geom_boxplot(\n    aes(group = season)\n  ) +\n  scale_x_continuous(\n    name = \"Season\",\n    breaks = 1:4,\n    labels = levels(bikes$season)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#discrete-or-continuous-2",
    "href": "SD/4.1_datavisualize/index.html#discrete-or-continuous-2",
    "title": "数据可视化",
    "section": "Discrete or Continuous?",
    "text": "Discrete or Continuous?\n\n\nggplot(\n  bikes,\n  aes(\n    x = as.numeric(season) +\n      as.numeric(season) / 8,\n    y = count\n  )\n) +\n  geom_boxplot(\n    aes(group = season)\n  ) +\n  scale_x_continuous(\n    name = \"Season\",\n    breaks = 1:4,\n    labels = levels(bikes$season)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete",
    "href": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete",
    "title": "数据可视化",
    "section": "`scale_color|fill_discrete`",
    "text": "`scale_color|fill_discrete`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_color_discrete(\n    name = \"Season:\",\n    type = c(\"#69b0d4\", \"#00CB79\", \"#F7B01B\", \"#a78f5f\")\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#inspect-assigned-colors",
    "href": "SD/4.1_datavisualize/index.html#inspect-assigned-colors",
    "title": "数据可视化",
    "section": "Inspect Assigned Colors",
    "text": "Inspect Assigned Colors\n\n\ng &lt;- ggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_color_discrete(\n    name = \"Season:\",\n    type = c(\"#3ca7d9\", \"#1ec99b\", \"#F7B01B\", \"#bb7e8f\")\n  )\n\ngb &lt;- ggplot_build(g)\n\ngb$data[[1]][c(1:5, 200:205, 400:405), 1:5]\n\n\n        x     y  colour PANEL group\n1   16439  6830 #3ca7d9     1     1\n2   16439  2404 #3ca7d9     1     1\n3   16440 14763 #3ca7d9     1     1\n4   16440  5609 #3ca7d9     1     1\n5   16441 14501 #3ca7d9     1     1\n200 16538  8830 #1ec99b     1     2\n201 16539 24019 #1ec99b     1     2\n202 16539 10500 #1ec99b     1     2\n203 16540 25640 #1ec99b     1     2\n204 16540 11830 #1ec99b     1     2\n205 16541 22216 #1ec99b     1     2\n400 16638 12079 #F7B01B     1     3\n401 16639 26646 #F7B01B     1     3\n402 16639 12446 #F7B01B     1     3\n403 16640 11312 #F7B01B     1     3\n404 16640  4722 #F7B01B     1     3\n405 16641 22748 #F7B01B     1     3"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete-1",
    "href": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete-1",
    "title": "数据可视化",
    "section": "`scale_color|fill_discrete`",
    "text": "`scale_color|fill_discrete`\n\n\nmy_colors &lt;- c(\n  `winter` = \"#3c89d9\",\n  `spring` = \"#1ec99b\",\n  `summer` = \"#F7B01B\",\n  `autumn` = \"#a26e7c\"\n)\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_color_discrete(\n    name = \"Season:\",\n    type = my_colors\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete-2",
    "href": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete-2",
    "title": "数据可视化",
    "section": "`scale_color|fill_discrete`",
    "text": "`scale_color|fill_discrete`\n\n\nmy_colors_alphabetical &lt;- c(\n  `autumn` = \"#a26e7c\",\n  `spring` = \"#1ec99b\",\n  `summer` = \"#F7B01B\",\n  `winter` = \"#3c89d9\"\n)\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_color_discrete(\n    name = \"Season:\",\n    type = my_colors_alphabetical\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete-3",
    "href": "SD/4.1_datavisualize/index.html#scale_colorfill_discrete-3",
    "title": "数据可视化",
    "section": "`scale_color|fill_discrete`",
    "text": "`scale_color|fill_discrete`\n\n\nlibrary(RColorBrewer)\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = season)\n) +\n  geom_point() +\n  scale_color_discrete(\n    name = \"Season:\",\n    type = brewer.pal(\n      n = 4,\n      name = \"Dark2\"\n    )\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#scale_colorfill_manual",
    "href": "SD/4.1_datavisualize/index.html#scale_colorfill_manual",
    "title": "数据可视化",
    "section": "`scale_color|fill_manual`",
    "text": "`scale_color|fill_manual`\n\n\nggplot(\n  bikes,\n  aes(x = date, y = count, color = weather_type)\n) +\n  geom_point() +\n  scale_color_manual(\n    name = \"Season:\",\n    values = brewer.pal(n = 6, name = \"Pastel1\"),\n    na.value = \"black\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-2",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-2",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nfacet &lt;-\n  ggplot(\n    diamonds,\n    aes(x = carat, y = price)\n  ) +\n  geom_point(\n    alpha = .3\n  ) +\n  geom_smooth(\n    aes(color = cut),\n    method = \"lm\",\n    se = FALSE\n  ) +\n  facet_grid(\n    cut ~ clarity,\n    space = \"free_x\",\n    scales = \"free_x\"\n  )\n\nfacet"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-3",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-3",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nfacet +\n  scale_x_continuous(\n    breaks = 0:5\n  ) +\n  scale_y_continuous(\n    limits = c(0, 30000),\n    breaks = 0:3 * 10000,\n    labels = c(\"$0\", \"$10,000\", \"$20,000\", \"$30,000\")\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-4",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-4",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nfacet +\n  scale_x_continuous(\n    breaks = 0:5\n  ) +\n  scale_y_continuous(\n    limits = c(0, 30000),\n    breaks = 0:3 * 10000,\n    labels = paste0(\n      \"$\",\n      format(\n        0:3 * 10000,\n        big.mark = \",\",\n        trim = TRUE\n      )\n    )\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-5",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-5",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nfacet +\n  scale_x_continuous(\n    breaks = 0:5\n  ) +\n  scale_y_continuous(\n    limits = c(0, 30000),\n    breaks = 0:3 * 10000,\n    labels = function(y)\n      paste0(\n        \"$\",\n        format(\n          y,\n          big.mark = \",\",\n          trim = TRUE\n        )\n      )\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-6",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-6",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nfacet +\n  scale_x_continuous(\n    breaks = 0:5\n  ) +\n  scale_y_continuous(\n    limits = c(0, 30000),\n    breaks = 0:3 * 10000,\n    labels = scales::dollar_format()\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-7",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-7",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nfacet +\n  scale_x_continuous(\n    breaks = 0:5\n  ) +\n  scale_y_continuous(\n    limits = c(0, 30000),\n    breaks = 0:3 * 10000,\n    labels = scales::dollar_format()\n  ) +\n  scale_color_brewer(\n    palette = \"Set2\",\n    guide = \"none\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#diamonds-facet-8",
    "href": "SD/4.1_datavisualize/index.html#diamonds-facet-8",
    "title": "数据可视化",
    "section": "Diamonds Facet",
    "text": "Diamonds Facet\n\n\nfacet +\n  scale_x_continuous(\n    breaks = 0:5\n  ) +\n  scale_y_continuous(\n    limits = c(0, 30000),\n    breaks = 0:3 * 10000,\n    labels = scales::dollar_format()\n  ) +\n  scale_color_brewer(\n    palette = \"Set2\"\n  ) +\n  theme(\n    legend.position = \"none\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#coordinate-systems",
    "href": "SD/4.1_datavisualize/index.html#coordinate-systems",
    "title": "数据可视化",
    "section": "Coordinate Systems",
    "text": "Coordinate Systems\n\n= interpret the position aesthetics\n\nlinear coordinate systems: preserve the geometrical shapes\n\ncoord_cartesian()\ncoord_fixed()\ncoord_flip()\n\nnon-linear coordinate systems: likely change the geometrical shapes\n\ncoord_polar()\ncoord_map() and coord_sf()\ncoord_trans()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#cartesian-coordinate-system",
    "href": "SD/4.1_datavisualize/index.html#cartesian-coordinate-system",
    "title": "数据可视化",
    "section": "Cartesian Coordinate System",
    "text": "Cartesian Coordinate System\n\n\nggplot(\n  bikes,\n  aes(x = season, y = count)\n) +\n  geom_boxplot() +\n  coord_cartesian()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#cartesian-coordinate-system-1",
    "href": "SD/4.1_datavisualize/index.html#cartesian-coordinate-system-1",
    "title": "数据可视化",
    "section": "Cartesian Coordinate System",
    "text": "Cartesian Coordinate System\n\n\nggplot(\n  bikes,\n  aes(x = season, y = count)\n) +\n  geom_boxplot() +\n  coord_cartesian(\n    ylim = c(NA, 15000)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#changing-limits",
    "href": "SD/4.1_datavisualize/index.html#changing-limits",
    "title": "数据可视化",
    "section": "Changing Limits",
    "text": "Changing Limits\nggplot(\n  bikes,\n  aes(x = season, y = count)\n) +\n  geom_boxplot() +\n  coord_cartesian(\n    ylim = c(NA, 15000)\n  )\nggplot(\n  bikes,\n  aes(x = season, y = count)\n) +\n  geom_boxplot() +\n  scale_y_continuous(\n    limits = c(NA, 15000)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#clipping",
    "href": "SD/4.1_datavisualize/index.html#clipping",
    "title": "数据可视化",
    "section": "Clipping",
    "text": "Clipping\n\n\nggplot(\n  bikes,\n  aes(x = season, y = count)\n) +\n  geom_boxplot() +\n  coord_cartesian(\n    ylim = c(NA, 15000),\n    clip = \"off\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#clipping-1",
    "href": "SD/4.1_datavisualize/index.html#clipping-1",
    "title": "数据可视化",
    "section": "Clipping",
    "text": "Clipping\n\n\nggplot(\n  filter(bikes, is_holiday == TRUE),\n  aes(x = temp_feel, y = count)\n) +\n  geom_point() +\n  geom_text(\n    aes(label = season),\n    nudge_x = .3,\n    hjust = 0\n  ) +\n  coord_cartesian(\n    clip = \"off\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#or-better-use-ggrepel",
    "href": "SD/4.1_datavisualize/index.html#or-better-use-ggrepel",
    "title": "数据可视化",
    "section": "… or better use {ggrepel}",
    "text": "… or better use {ggrepel}\n\n\nggplot(\n  filter(bikes, is_holiday == TRUE),\n  aes(x = temp_feel, y = count)\n) +\n  geom_point() +\n  ggrepel::geom_text_repel(\n    aes(label = season),\n    nudge_x = .3,\n    hjust = 0\n  ) +\n  coord_cartesian(\n    clip = \"off\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#remove-all-padding",
    "href": "SD/4.1_datavisualize/index.html#remove-all-padding",
    "title": "数据可视化",
    "section": "Remove All Padding",
    "text": "Remove All Padding\n\n\nggplot(\n  bikes,\n  aes(x = temp_feel, y = count)\n) +\n  geom_point() +\n  coord_cartesian(\n    expand = FALSE,\n    clip = \"off\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#fixed-coordinate-system",
    "href": "SD/4.1_datavisualize/index.html#fixed-coordinate-system",
    "title": "数据可视化",
    "section": "Fixed Coordinate System",
    "text": "Fixed Coordinate System\nggplot(\n  bikes,\n  aes(x = temp_feel, y = temp)\n) +\n  geom_point() +\n  coord_fixed()\nggplot(\n  bikes,\n  aes(x = temp_feel, y = temp)\n) +\n  geom_point() +\n  coord_fixed(ratio = 4)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#flipped-coordinate-system",
    "href": "SD/4.1_datavisualize/index.html#flipped-coordinate-system",
    "title": "数据可视化",
    "section": "Flipped Coordinate System",
    "text": "Flipped Coordinate System\nggplot(\n  bikes,\n  aes(x = weather_type)\n) +\n  geom_bar() +\n  coord_cartesian()\nggplot(\n  bikes,\n  aes(x = weather_type)\n) +\n  geom_bar() +\n  coord_flip()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#flipped-coordinate-system-1",
    "href": "SD/4.1_datavisualize/index.html#flipped-coordinate-system-1",
    "title": "数据可视化",
    "section": "Flipped Coordinate System",
    "text": "Flipped Coordinate System\nggplot(\n  bikes,\n  aes(y = weather_type)\n) +\n  geom_bar() +\n  coord_cartesian()\nggplot(\n  bikes,\n  aes(x = weather_type)\n) +\n  geom_bar() +\n  coord_flip()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#reminder-sort-your-bars",
    "href": "SD/4.1_datavisualize/index.html#reminder-sort-your-bars",
    "title": "数据可视化",
    "section": "Reminder: Sort Your Bars!",
    "text": "Reminder: Sort Your Bars!\n\n\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(y = fct_infreq(weather_type))\n) +\n  geom_bar()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#reminder-sort-your-bars-1",
    "href": "SD/4.1_datavisualize/index.html#reminder-sort-your-bars-1",
    "title": "数据可视化",
    "section": "Reminder: Sort Your Bars!",
    "text": "Reminder: Sort Your Bars!\n\n\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(\n    y = fct_rev(\n      fct_infreq(weather_type)\n    )\n  )\n) +\n  geom_bar()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#circular-corrdinate-system",
    "href": "SD/4.1_datavisualize/index.html#circular-corrdinate-system",
    "title": "数据可视化",
    "section": "Circular Corrdinate System",
    "text": "Circular Corrdinate System\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = weather_type, fill = weather_type)\n) +\n  geom_bar() +\n  coord_polar()\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = weather_type, fill = weather_type)\n) +\n  geom_bar() +\n  coord_cartesian()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#circular-cordinate-system",
    "href": "SD/4.1_datavisualize/index.html#circular-cordinate-system",
    "title": "数据可视化",
    "section": "Circular Cordinate System",
    "text": "Circular Cordinate System\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = fct_infreq(weather_type), fill = weather_type)\n) +\n  geom_bar(width = 1) +\n  coord_polar()\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = fct_infreq(weather_type), fill = weather_type)\n) +\n  geom_bar(width = 1) +\n  coord_cartesian()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#circular-corrdinate-system-1",
    "href": "SD/4.1_datavisualize/index.html#circular-corrdinate-system-1",
    "title": "数据可视化",
    "section": "Circular Corrdinate System",
    "text": "Circular Corrdinate System\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = fct_infreq(weather_type), fill = weather_type)\n) +\n  geom_bar() +\n  coord_polar(theta = \"x\")\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = fct_infreq(weather_type), fill = weather_type)\n) +\n  geom_bar() +\n  coord_polar(theta = \"y\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#circular-corrdinate-system-2",
    "href": "SD/4.1_datavisualize/index.html#circular-corrdinate-system-2",
    "title": "数据可视化",
    "section": "Circular Corrdinate System",
    "text": "Circular Corrdinate System\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = 1, fill = weather_type)\n) +\n  geom_bar(position = \"stack\") +\n  coord_polar(theta = \"y\")\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = 1, fill = weather_type)\n) +\n  geom_bar(position = \"stack\") +\n  coord_cartesian()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#circular-corrdinate-system-3",
    "href": "SD/4.1_datavisualize/index.html#circular-corrdinate-system-3",
    "title": "数据可视化",
    "section": "Circular Corrdinate System",
    "text": "Circular Corrdinate System\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = 1, fill = fct_rev(fct_infreq(weather_type)))\n) +\n  geom_bar(position = \"stack\") +\n  coord_polar(theta = \"y\") +\n  scale_fill_discrete(name = NULL)\nggplot(\n  filter(bikes, !is.na(weather_type)),\n  aes(x = 1, fill = fct_rev(fct_infreq(weather_type)))\n) +\n  geom_bar(position = \"stack\") +\n  coord_cartesian() +\n  scale_fill_discrete(name = NULL)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#transform-a-coordinate-system",
    "href": "SD/4.1_datavisualize/index.html#transform-a-coordinate-system",
    "title": "数据可视化",
    "section": "Transform a Coordinate System",
    "text": "Transform a Coordinate System\n\n\nggplot(\n  bikes,\n  aes(x = temp, y = count)\n) +\n  geom_point() +\n  coord_trans(y = \"log10\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#transform-a-coordinate-system-1",
    "href": "SD/4.1_datavisualize/index.html#transform-a-coordinate-system-1",
    "title": "数据可视化",
    "section": "Transform a Coordinate System",
    "text": "Transform a Coordinate System\nggplot(\n  bikes,\n  aes(x = temp, y = count, group = day_night)\n) +\n  geom_point() +\n  geom_smooth(method = \"lm\") +\n  coord_trans(y = \"log10\")\nggplot(\n  bikes,\n  aes(x = temp, y = count, group = day_night)\n) +\n  geom_point() +\n  geom_smooth(method = \"lm\") +\n  scale_y_log10()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#patchwork",
    "href": "SD/4.1_datavisualize/index.html#patchwork",
    "title": "数据可视化",
    "section": "{patchwork}",
    "text": "{patchwork}\n\n# install.packages(\"patchwork\")\nrequire(patchwork)\n(p1 + p2) / p3"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#collect-guides",
    "href": "SD/4.1_datavisualize/index.html#collect-guides",
    "title": "数据可视化",
    "section": "“Collect Guides”",
    "text": "“Collect Guides”\n\n(p1 + p2) / p3 + plot_layout(guides = \"collect\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#apply-theming",
    "href": "SD/4.1_datavisualize/index.html#apply-theming",
    "title": "数据可视化",
    "section": "Apply Theming",
    "text": "Apply Theming\n\n((p1 + p2) / p3 & theme(legend.justification = \"top\")) +\n  plot_layout(guides = \"collect\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#apply-theming-1",
    "href": "SD/4.1_datavisualize/index.html#apply-theming-1",
    "title": "数据可视化",
    "section": "Apply Theming",
    "text": "Apply Theming\n\n(p1 + p2) /\n  p3 &\n  theme(\n    legend.position = \"none\",\n    plot.background = element_rect(color = \"black\", size = 3)\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#adjust-widths-and-heights",
    "href": "SD/4.1_datavisualize/index.html#adjust-widths-and-heights",
    "title": "数据可视化",
    "section": "Adjust Widths and Heights",
    "text": "Adjust Widths and Heights\n\n((p1 + p2) / p3 & theme(legend.position = \"none\")) +\n  plot_layout(heights = c(.2, .1), widths = c(2, 1))"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#use-a-custom-layout",
    "href": "SD/4.1_datavisualize/index.html#use-a-custom-layout",
    "title": "数据可视化",
    "section": "Use A Custom Layout",
    "text": "Use A Custom Layout\n\npicasso &lt;- \"\nAAAAAA#BBBB\nCCCCCCCCC##\nCCCCCCCCC##\"\n(p1 + p2 + p3 & theme(legend.position = \"none\")) +\n  plot_layout(design = picasso)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#add-labels",
    "href": "SD/4.1_datavisualize/index.html#add-labels",
    "title": "数据可视化",
    "section": "Add Labels",
    "text": "Add Labels\n\npl1 &lt;- p1 +\n  labs(tag = NULL, title = \"Plot One\") +\n  theme(legend.position = \"none\")\npl2 &lt;- p2 +\n  labs(tag = NULL, title = \"Plot Two\") +\n  theme(legend.position = \"none\")\npl3 &lt;- p3 +\n  labs(tag = NULL, title = \"Plot Three\") +\n  theme(legend.position = \"none\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#add-labels-1",
    "href": "SD/4.1_datavisualize/index.html#add-labels-1",
    "title": "数据可视化",
    "section": "Add Labels",
    "text": "Add Labels\n\n(pl1 + pl2) /\n  pl3 +\n  plot_annotation(\n    tag_levels = \"1\",\n    tag_prefix = \"P\",\n    title = \"An overarching title for all 3 plots, placed on the very top while all other titles are sitting below the tags.\"\n  )"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#add-text",
    "href": "SD/4.1_datavisualize/index.html#add-text",
    "title": "数据可视化",
    "section": "Add Text",
    "text": "Add Text\n\nGraphicCode\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntext &lt;- tibble::tibble(\n  x = 0,\n  y = 0,\n  label = \"Lorem ipsum dolor sit amet, **consectetur adipiscing elit**, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation &lt;b style='color:#000080;'&gt;ullamco laboris nisi&lt;/b&gt; ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat &lt;b style='color:#cc0000;'&gt;cupidatat non proident&lt;/b&gt;, sunt in culpa qui officia deserunt mollit anim id est laborum.\"\n)\npt &lt;- ggplot(text, aes(x = x, y = y)) +\n  ggtext::geom_textbox(\n    aes(label = label),\n    box.color = NA,\n    width = unit(23, \"lines\"),\n    color = \"grey40\",\n    size = 6.5,\n    lineheight = 1.4\n  ) +\n  coord_cartesian(expand = FALSE, clip = \"off\") +\n  theme_void()\npt"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#add-text-1",
    "href": "SD/4.1_datavisualize/index.html#add-text-1",
    "title": "数据可视化",
    "section": "Add Text",
    "text": "Add Text\n\n(p1 + pt) / p3"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#add-inset-plots",
    "href": "SD/4.1_datavisualize/index.html#add-inset-plots",
    "title": "数据可视化",
    "section": "Add Inset Plots",
    "text": "Add Inset Plots\n\npl1 + inset_element(pl2, l = .6, b = .1, r = 1, t = .6)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#add-inset-plots-1",
    "href": "SD/4.1_datavisualize/index.html#add-inset-plots-1",
    "title": "数据可视化",
    "section": "Add Inset Plots",
    "text": "Add Inset Plots\n\npl1 + inset_element(pl2, l = .6, b = 0, r = 1, t = .5, align_to = 'full')"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#add-inset-plots-2",
    "href": "SD/4.1_datavisualize/index.html#add-inset-plots-2",
    "title": "数据可视化",
    "section": "Add Inset Plots",
    "text": "Add Inset Plots\n\n(pl1 + inset_element(pl2, l = .6, b = .1, r = 1, t = .6) + pt) / pl3"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习",
    "href": "SD/4.1_datavisualize/index.html#练习",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nlibrary(palmerpenguins)\nlibrary(ggthemes)\npenguins\n\n# A tibble: 344 × 8\n   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g\n   &lt;fct&gt;   &lt;fct&gt;              &lt;dbl&gt;         &lt;dbl&gt;             &lt;int&gt;       &lt;int&gt;\n 1 Adelie  Torgersen           39.1          18.7               181        3750\n 2 Adelie  Torgersen           39.5          17.4               186        3800\n 3 Adelie  Torgersen           40.3          18                 195        3250\n 4 Adelie  Torgersen           NA            NA                  NA          NA\n 5 Adelie  Torgersen           36.7          19.3               193        3450\n 6 Adelie  Torgersen           39.3          20.6               190        3650\n 7 Adelie  Torgersen           38.9          17.8               181        3625\n 8 Adelie  Torgersen           39.2          19.6               195        4675\n 9 Adelie  Torgersen           34.1          18.1               193        3475\n10 Adelie  Torgersen           42            20.2               190        4250\n# ℹ 334 more rows\n# ℹ 2 more variables: sex &lt;fct&gt;, year &lt;int&gt;"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#效果",
    "href": "SD/4.1_datavisualize/index.html#效果",
    "title": "数据可视化",
    "section": "效果",
    "text": "效果"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-1",
    "href": "SD/4.1_datavisualize/index.html#练习-1",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\n\np &lt;- ggplot(\n  data = penguins,\n  mapping = aes(x = flipper_length_mm, y = body_mass_g)\n) +\n  geom_point(aes(color = species, shape = species)) +\n  geom_smooth(method = \"lm\") +\n  labs(\n    title = \"Body mass and flipper length\",\n    subtitle = \"Dimensions for Adelie, Chinstrap, and Gentoo Penguins\",\n    x = \"Flipper length (mm)\",\n    y = \"Body mass (g)\",\n    color = \"Species\",\n    shape = \"Species\"\n  ) +\n  scale_color_colorblind()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-2",
    "href": "SD/4.1_datavisualize/index.html#练习-2",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\n\np &lt;- ggplot(\n  data = penguins,\n  mapping = aes(x = flipper_length_mm, y = body_mass_g)\n) +\n  geom_point(aes(color = bill_depth_mm)) +\n  geom_smooth()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-3",
    "href": "SD/4.1_datavisualize/index.html#练习-3",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\n\np &lt;- ggplot(\n  data = penguins,\n  mapping = aes(x = flipper_length_mm, y = body_mass_g, color = island)\n) +\n  geom_point() +\n  geom_smooth(se = FALSE)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分层展示",
    "href": "SD/4.1_datavisualize/index.html#分层展示",
    "title": "数据可视化",
    "section": "分层展示",
    "text": "分层展示\n\nCodeGraphic\n\n\n\np &lt;- ggplot(\n  data = penguins,\n  mapping = aes(x = flipper_length_mm, y = body_mass_g)\n) +\n  geom_point() +\n  geom_smooth()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#柱状图",
    "href": "SD/4.1_datavisualize/index.html#柱状图",
    "title": "数据可视化",
    "section": "柱状图",
    "text": "柱状图\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = species)) +\n  geom_bar()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#柱状图-1",
    "href": "SD/4.1_datavisualize/index.html#柱状图-1",
    "title": "数据可视化",
    "section": "柱状图",
    "text": "柱状图\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = fct_infreq(species))) +\n  geom_bar()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#直方图",
    "href": "SD/4.1_datavisualize/index.html#直方图",
    "title": "数据可视化",
    "section": "直方图",
    "text": "直方图\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = body_mass_g)) +\n  geom_histogram(binwidth = 200)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#直方图-1",
    "href": "SD/4.1_datavisualize/index.html#直方图-1",
    "title": "数据可视化",
    "section": "直方图",
    "text": "直方图\n\nCodeGraphic\n\n\np1 &lt;- ggplot(penguins, aes(x = body_mass_g)) +\n  geom_histogram(binwidth = 20)\np2 &lt;- ggplot(penguins, aes(x = body_mass_g)) +\n  geom_histogram(binwidth = 2000)\np &lt;- p1 + p2"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#密度图",
    "href": "SD/4.1_datavisualize/index.html#密度图",
    "title": "数据可视化",
    "section": "密度图",
    "text": "密度图\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = body_mass_g)) +\n  geom_density()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#箱图",
    "href": "SD/4.1_datavisualize/index.html#箱图",
    "title": "数据可视化",
    "section": "箱图",
    "text": "箱图\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = species, y = body_mass_g)) +\n  geom_boxplot()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分组",
    "href": "SD/4.1_datavisualize/index.html#分组",
    "title": "数据可视化",
    "section": "分组",
    "text": "分组\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = body_mass_g, color = species)) +\n  geom_density(linewidth = 0.75)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分组-1",
    "href": "SD/4.1_datavisualize/index.html#分组-1",
    "title": "数据可视化",
    "section": "分组",
    "text": "分组\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = body_mass_g, color = species, fill = species)) +\n  geom_density(alpha = 0.5)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分组-2",
    "href": "SD/4.1_datavisualize/index.html#分组-2",
    "title": "数据可视化",
    "section": "分组",
    "text": "分组\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = island, fill = species)) +\n  geom_bar()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分组-3",
    "href": "SD/4.1_datavisualize/index.html#分组-3",
    "title": "数据可视化",
    "section": "分组",
    "text": "分组\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = island, fill = species)) +\n  geom_bar(position = \"fill\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分组-4",
    "href": "SD/4.1_datavisualize/index.html#分组-4",
    "title": "数据可视化",
    "section": "分组",
    "text": "分组\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +\n  geom_point()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分组-5",
    "href": "SD/4.1_datavisualize/index.html#分组-5",
    "title": "数据可视化",
    "section": "分组",
    "text": "分组\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +\n  geom_point(aes(color = species, shape = island))"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分面",
    "href": "SD/4.1_datavisualize/index.html#分面",
    "title": "数据可视化",
    "section": "分面",
    "text": "分面\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +\n  geom_point(aes(color = species, shape = species)) +\n  facet_wrap(~island)"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#分面-1",
    "href": "SD/4.1_datavisualize/index.html#分面-1",
    "title": "数据可视化",
    "section": "分面",
    "text": "分面\n\nCodeGraphic\n\n\n\np &lt;- ggplot(\n  data = penguins,\n  mapping = aes(\n    x = bill_length_mm,\n    y = bill_depth_mm,\n    color = species,\n    shape = species\n  )\n) +\n  geom_point() +\n  labs(color = \"Species\")"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-4",
    "href": "SD/4.1_datavisualize/index.html#练习-4",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\np1 &lt;- ggplot(penguins, aes(x = island, fill = species)) +\n  geom_bar(position = \"fill\")\np2 &lt;- ggplot(penguins, aes(x = species, fill = island)) +\n  geom_bar(position = \"fill\")\np &lt;- p1 + p2"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-5",
    "href": "SD/4.1_datavisualize/index.html#练习-5",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\n\np &lt;- ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +\n  geom_point()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-6",
    "href": "SD/4.1_datavisualize/index.html#练习-6",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\n\np &lt;- ggplot(mpg, aes(x = class)) +\n  geom_bar()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-7",
    "href": "SD/4.1_datavisualize/index.html#练习-7",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\n\np &lt;- ggplot(mpg, aes(x = cty, y = hwy)) +\n  geom_point()"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#练习-8",
    "href": "SD/4.1_datavisualize/index.html#练习-8",
    "title": "数据可视化",
    "section": "练习",
    "text": "练习\n\nCodeGraphic\n\n\n\np &lt;- ggplot(data = mpg) +\n  geom_point(mapping = aes(x = displ, y = hwy))"
  },
  {
    "objectID": "SD/4.1_datavisualize/index.html#欢迎讨论",
    "href": "SD/4.1_datavisualize/index.html#欢迎讨论",
    "title": "数据可视化",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n#| results: ‘asis’ #| echo: false rmdify::slideend( wechat = FALSE, type = “public”, tel = FALSE, thislink = “../” ) ` ``"
  },
  {
    "objectID": "SD/5.1_model/index.html#何为tidymodels",
    "href": "SD/5.1_model/index.html#何为tidymodels",
    "title": "模型构建",
    "section": "何为tidymodels?",
    "text": "何为tidymodels?\n\nlibrary(tidymodels)\n\n#&gt; ── Attaching packages ──────────────────────────── tidymodels 1.3.0 ──\n\n\n#&gt; ✔ broom        1.0.9     ✔ rsample      1.3.1\n#&gt; ✔ dials        1.4.1     ✔ tune         1.3.0\n#&gt; ✔ infer        1.0.9     ✔ workflows    1.2.0\n#&gt; ✔ modeldata    1.5.0     ✔ workflowsets 1.1.1\n#&gt; ✔ parsnip      1.3.2     ✔ yardstick    1.3.2\n#&gt; ✔ recipes      1.3.1\n\n\n#&gt; ── Conflicts ─────────────────────────────── tidymodels_conflicts() ──\n#&gt; ✖ scales::discard() masks purrr::discard()\n#&gt; ✖ dplyr::filter()   masks stats::filter()\n#&gt; ✖ recipes::fixed()  masks stringr::fixed()\n#&gt; ✖ dplyr::lag()      masks stats::lag()\n#&gt; ✖ yardstick::spec() masks readr::spec()\n#&gt; ✖ recipes::step()   masks stats::step()"
  },
  {
    "objectID": "SD/5.1_model/index.html#整体思路",
    "href": "SD/5.1_model/index.html#整体思路",
    "title": "模型构建",
    "section": "整体思路",
    "text": "整体思路"
  },
  {
    "objectID": "SD/5.1_model/index.html#整体思路-1",
    "href": "SD/5.1_model/index.html#整体思路-1",
    "title": "模型构建",
    "section": "整体思路",
    "text": "整体思路\n\n\n\n\n\n\n\n\n\n\nStress that we are not fitting a model on the entire training set other than for illustrative purposes in deck 2."
  },
  {
    "objectID": "SD/5.1_model/index.html#整体思路-2",
    "href": "SD/5.1_model/index.html#整体思路-2",
    "title": "模型构建",
    "section": "整体思路",
    "text": "整体思路"
  },
  {
    "objectID": "SD/5.1_model/index.html#整体思路-3",
    "href": "SD/5.1_model/index.html#整体思路-3",
    "title": "模型构建",
    "section": "整体思路",
    "text": "整体思路"
  },
  {
    "objectID": "SD/5.1_model/index.html#整体思路-4",
    "href": "SD/5.1_model/index.html#整体思路-4",
    "title": "模型构建",
    "section": "整体思路",
    "text": "整体思路"
  },
  {
    "objectID": "SD/5.1_model/index.html#整体思路-5",
    "href": "SD/5.1_model/index.html#整体思路-5",
    "title": "模型构建",
    "section": "整体思路",
    "text": "整体思路"
  },
  {
    "objectID": "SD/5.1_model/index.html#整体思路-6",
    "href": "SD/5.1_model/index.html#整体思路-6",
    "title": "模型构建",
    "section": "整体思路",
    "text": "整体思路"
  },
  {
    "objectID": "SD/5.1_model/index.html#相关包的安装",
    "href": "SD/5.1_model/index.html#相关包的安装",
    "title": "模型构建",
    "section": "相关包的安装",
    "text": "相关包的安装\n\n# Install the packages for the workshop\npkgs &lt;-\n  c(\n    \"bonsai\",\n    \"doParallel\",\n    \"embed\",\n    \"finetune\",\n    \"lightgbm\",\n    \"lme4\",\n    \"plumber\",\n    \"probably\",\n    \"ranger\",\n    \"rpart\",\n    \"rpart.plot\",\n    \"rules\",\n    \"splines2\",\n    \"stacks\",\n    \"text2vec\",\n    \"textrecipes\",\n    \"tidymodels\",\n    \"vetiver\",\n    \"remotes\"\n  )\n\ninstall.packages(pkgs)"
  },
  {
    "objectID": "SD/5.1_model/index.html#data-on-chicago-taxi-trips",
    "href": "SD/5.1_model/index.html#data-on-chicago-taxi-trips",
    "title": "模型构建",
    "section": "Data on Chicago taxi trips",
    "text": "Data on Chicago taxi trips\n\nlibrary(tidymodels)\ntaxi\n\n#&gt; # A tibble: 10,000 × 7\n#&gt;    tip   distance company                      local dow   month  hour\n#&gt;    &lt;fct&gt;    &lt;dbl&gt; &lt;fct&gt;                        &lt;fct&gt; &lt;fct&gt; &lt;fct&gt; &lt;int&gt;\n#&gt;  1 yes      17.2  Chicago Independents         no    Thu   Feb      16\n#&gt;  2 yes       0.88 City Service                 yes   Thu   Mar       8\n#&gt;  3 yes      18.1  other                        no    Mon   Feb      18\n#&gt;  4 yes      20.7  Chicago Independents         no    Mon   Apr       8\n#&gt;  5 yes      12.2  Chicago Independents         no    Sun   Mar      21\n#&gt;  6 yes       0.94 Sun Taxi                     yes   Sat   Apr      23\n#&gt;  7 yes      17.5  Flash Cab                    no    Fri   Mar      12\n#&gt;  8 yes      17.7  other                        no    Sun   Jan       6\n#&gt;  9 yes       1.85 Taxicab Insurance Agency Llc no    Fri   Apr      12\n#&gt; 10 yes       1.47 City Service                 no    Tue   Mar      14\n#&gt; # ℹ 9,990 more rows"
  },
  {
    "objectID": "SD/5.1_model/index.html#数据分割与使用",
    "href": "SD/5.1_model/index.html#数据分割与使用",
    "title": "模型构建",
    "section": "数据分割与使用",
    "text": "数据分割与使用\n对于机器学习，我们通常将数据分成训练集和测试集：\n\n\n训练集用于估计模型参数。\n测试集用于独立评估模型性能。\n\n\n\n在训练过程中不要使用测试集。"
  },
  {
    "objectID": "SD/5.1_model/index.html#the-initial-split",
    "href": "SD/5.1_model/index.html#the-initial-split",
    "title": "模型构建",
    "section": "The initial split",
    "text": "The initial split\n\nset.seed(123)\ntaxi_split &lt;- initial_split(taxi)\ntaxi_split\n\n#&gt; &lt;Training/Testing/Total&gt;\n#&gt; &lt;7500/2500/10000&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#accessing-the-data",
    "href": "SD/5.1_model/index.html#accessing-the-data",
    "title": "模型构建",
    "section": "Accessing the data",
    "text": "Accessing the data\n\ntaxi_train &lt;- training(taxi_split)\ntaxi_test &lt;- testing(taxi_split)"
  },
  {
    "objectID": "SD/5.1_model/index.html#the-training-set",
    "href": "SD/5.1_model/index.html#the-training-set",
    "title": "模型构建",
    "section": "The training set",
    "text": "The training set\n\ntaxi_train\n\n#&gt; # A tibble: 7,500 × 7\n#&gt;    tip   distance company                   local dow   month  hour\n#&gt;    &lt;fct&gt;    &lt;dbl&gt; &lt;fct&gt;                     &lt;fct&gt; &lt;fct&gt; &lt;fct&gt; &lt;int&gt;\n#&gt;  1 yes       0.7  Taxi Affiliation Services yes   Tue   Mar      18\n#&gt;  2 yes       0.99 Sun Taxi                  yes   Tue   Jan       8\n#&gt;  3 yes       1.78 other                     no    Sat   Mar      22\n#&gt;  4 yes       0    Taxi Affiliation Services yes   Wed   Apr      15\n#&gt;  5 yes       0    Taxi Affiliation Services no    Sun   Jan      21\n#&gt;  6 yes       2.3  other                     no    Sat   Apr      21\n#&gt;  7 yes       6.35 Sun Taxi                  no    Wed   Mar      16\n#&gt;  8 yes       2.79 other                     no    Sun   Feb      14\n#&gt;  9 yes      16.6  other                     no    Sun   Apr      18\n#&gt; 10 yes       0.02 Chicago Independents      yes   Sun   Apr      15\n#&gt; # ℹ 7,490 more rows"
  },
  {
    "objectID": "SD/5.1_model/index.html#练习",
    "href": "SD/5.1_model/index.html#练习",
    "title": "模型构建",
    "section": "练习",
    "text": "练习\n\nset.seed(123)\ntaxi_split &lt;- initial_split(taxi, prop = 0.8)\ntaxi_train &lt;- training(taxi_split)\ntaxi_test &lt;- testing(taxi_split)\n\nnrow(taxi_train)\n\n#&gt; [1] 8000\n\nnrow(taxi_test)\n\n#&gt; [1] 2000"
  },
  {
    "objectID": "SD/5.1_model/index.html#stratification",
    "href": "SD/5.1_model/index.html#stratification",
    "title": "模型构建",
    "section": "Stratification",
    "text": "Stratification\nUse strata = tip\n\nset.seed(123)\ntaxi_split &lt;- initial_split(taxi, prop = 0.8, strata = tip)\ntaxi_split\n\n#&gt; &lt;Training/Testing/Total&gt;\n#&gt; &lt;8000/2000/10000&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#stratification-1",
    "href": "SD/5.1_model/index.html#stratification-1",
    "title": "模型构建",
    "section": "Stratification",
    "text": "Stratification\nStratification often helps, with very little downside"
  },
  {
    "objectID": "SD/5.1_model/index.html#模型类型",
    "href": "SD/5.1_model/index.html#模型类型",
    "title": "模型构建",
    "section": "模型类型",
    "text": "模型类型\n模型多种多样\n\nlm for linear model\nglm for generalized linear model (e.g. logistic regression)\nglmnet for regularized regression\nkeras for regression using TensorFlow\nstan for Bayesian regression\nspark for large data sets"
  },
  {
    "objectID": "SD/5.1_model/index.html#指定模型",
    "href": "SD/5.1_model/index.html#指定模型",
    "title": "模型构建",
    "section": "指定模型",
    "text": "指定模型\n\nlogistic_reg()\n\n#&gt; Logistic Regression Model Specification (classification)\n#&gt; \n#&gt; Computational engine: glm\n\n\n\nModels have default engines"
  },
  {
    "objectID": "SD/5.1_model/index.html#to-specify-a-model",
    "href": "SD/5.1_model/index.html#to-specify-a-model",
    "title": "模型构建",
    "section": "To specify a model",
    "text": "To specify a model\n\nlogistic_reg() %&gt;%\n  set_engine(\"glmnet\")\n\n#&gt; Logistic Regression Model Specification (classification)\n#&gt; \n#&gt; Computational engine: glmnet\n\n\n\n\nlogistic_reg() %&gt;%\n  set_engine(\"stan\")\n\n#&gt; Logistic Regression Model Specification (classification)\n#&gt; \n#&gt; Computational engine: stan\n\n\n\n\n\nChoose a model\nSpecify an engine\nSet the mode"
  },
  {
    "objectID": "SD/5.1_model/index.html#to-specify-a-model-1",
    "href": "SD/5.1_model/index.html#to-specify-a-model-1",
    "title": "模型构建",
    "section": "To specify a model",
    "text": "To specify a model\n\ndecision_tree()\n\n#&gt; Decision Tree Model Specification (unknown mode)\n#&gt; \n#&gt; Computational engine: rpart\n\n\n\nSome models have a default mode"
  },
  {
    "objectID": "SD/5.1_model/index.html#to-specify-a-model-2",
    "href": "SD/5.1_model/index.html#to-specify-a-model-2",
    "title": "模型构建",
    "section": "To specify a model",
    "text": "To specify a model\n\ndecision_tree() %&gt;%\n  set_mode(\"classification\")\n\n#&gt; Decision Tree Model Specification (classification)\n#&gt; \n#&gt; Computational engine: rpart\n\n\n\n\n\nAll available models are listed at https://www.tidymodels.org/find/parsnip/"
  },
  {
    "objectID": "SD/5.1_model/index.html#workflows",
    "href": "SD/5.1_model/index.html#workflows",
    "title": "模型构建",
    "section": "Workflows",
    "text": "Workflows"
  },
  {
    "objectID": "SD/5.1_model/index.html#为什么要使用-workflow",
    "href": "SD/5.1_model/index.html#为什么要使用-workflow",
    "title": "模型构建",
    "section": "为什么要使用 workflow()?",
    "text": "为什么要使用 workflow()?\n\n与基本的 R 工具相比，工作流能更好地处理新的因子水平\n\n\n\n除了公式之外，还可以使用其他的预处理器（更多关于高级 tidymodels 中的特征工程！）\n\n\n\n\n在使用多个模型时，它们可以帮助组织工作\n\n\n\n\n最重要的是，工作流涵盖了整个建模过程：fit() 和 predict() 不仅适用于实际的模型拟合，还适用于预处理步骤\n\n\n工作流比基本的 R 处理水平更好的两种方式：\n\n强制要求在预测时不允许出现新的水平（这是一个可选的检查，可以关闭）\n恢复在拟合时存在但在预测时缺失的水平（例如，“新”数据中没有该水平的实例）"
  },
  {
    "objectID": "SD/5.1_model/index.html#a-model-workflow",
    "href": "SD/5.1_model/index.html#a-model-workflow",
    "title": "模型构建",
    "section": "A model workflow",
    "text": "A model workflow\n\ntree_spec &lt;-\n  decision_tree(cost_complexity = 0.002) %&gt;%\n  set_mode(\"classification\")\n\ntree_spec %&gt;%\n  fit(tip ~ ., data = taxi_train)\n\n#&gt; parsnip model object\n#&gt; \n#&gt; n= 8000 \n#&gt; \n#&gt; node), split, n, loss, yval, (yprob)\n#&gt;       * denotes terminal node\n#&gt; \n#&gt;  1) root 8000 616 yes (0.92300000 0.07700000)  \n#&gt;    2) distance&gt;=14.12 2041  68 yes (0.96668300 0.03331700) *\n#&gt;    3) distance&lt; 14.12 5959 548 yes (0.90803826 0.09196174)  \n#&gt;      6) distance&lt; 5.275 5419 450 yes (0.91695885 0.08304115) *\n#&gt;      7) distance&gt;=5.275 540  98 yes (0.81851852 0.18148148)  \n#&gt;       14) company=Chicago Independents,City Service,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc,other 478  68 yes (0.85774059 0.14225941) *\n#&gt;       15) company=Flash Cab 62  30 yes (0.51612903 0.48387097)  \n#&gt;         30) dow=Thu 12   2 yes (0.83333333 0.16666667) *\n#&gt;         31) dow=Sun,Mon,Tue,Wed,Fri,Sat 50  22 no (0.44000000 0.56000000)  \n#&gt;           62) distance&gt;=11.77 14   4 yes (0.71428571 0.28571429) *\n#&gt;           63) distance&lt; 11.77 36  12 no (0.33333333 0.66666667) *"
  },
  {
    "objectID": "SD/5.1_model/index.html#a-model-workflow-1",
    "href": "SD/5.1_model/index.html#a-model-workflow-1",
    "title": "模型构建",
    "section": "A model workflow",
    "text": "A model workflow\n\ntree_spec &lt;-\n  decision_tree(cost_complexity = 0.002) %&gt;%\n  set_mode(\"classification\")\n\nworkflow() %&gt;%\n  add_formula(tip ~ .) %&gt;%\n  add_model(tree_spec) %&gt;%\n  fit(data = taxi_train)\n\n#&gt; ══ Workflow [trained] ════════════════════════════════════════════════\n#&gt; Preprocessor: Formula\n#&gt; Model: decision_tree()\n#&gt; \n#&gt; ── Preprocessor ──────────────────────────────────────────────────────\n#&gt; tip ~ .\n#&gt; \n#&gt; ── Model ─────────────────────────────────────────────────────────────\n#&gt; n= 8000 \n#&gt; \n#&gt; node), split, n, loss, yval, (yprob)\n#&gt;       * denotes terminal node\n#&gt; \n#&gt;  1) root 8000 616 yes (0.92300000 0.07700000)  \n#&gt;    2) distance&gt;=14.12 2041  68 yes (0.96668300 0.03331700) *\n#&gt;    3) distance&lt; 14.12 5959 548 yes (0.90803826 0.09196174)  \n#&gt;      6) distance&lt; 5.275 5419 450 yes (0.91695885 0.08304115) *\n#&gt;      7) distance&gt;=5.275 540  98 yes (0.81851852 0.18148148)  \n#&gt;       14) company=Chicago Independents,City Service,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc,other 478  68 yes (0.85774059 0.14225941) *\n#&gt;       15) company=Flash Cab 62  30 yes (0.51612903 0.48387097)  \n#&gt;         30) dow=Thu 12   2 yes (0.83333333 0.16666667) *\n#&gt;         31) dow=Sun,Mon,Tue,Wed,Fri,Sat 50  22 no (0.44000000 0.56000000)  \n#&gt;           62) distance&gt;=11.77 14   4 yes (0.71428571 0.28571429) *\n#&gt;           63) distance&lt; 11.77 36  12 no (0.33333333 0.66666667) *"
  },
  {
    "objectID": "SD/5.1_model/index.html#a-model-workflow-2",
    "href": "SD/5.1_model/index.html#a-model-workflow-2",
    "title": "模型构建",
    "section": "A model workflow",
    "text": "A model workflow\n\ntree_spec &lt;-\n  decision_tree(cost_complexity = 0.002) %&gt;%\n  set_mode(\"classification\")\n\nworkflow(tip ~ ., tree_spec) %&gt;%\n  fit(data = taxi_train)\n\n#&gt; ══ Workflow [trained] ════════════════════════════════════════════════\n#&gt; Preprocessor: Formula\n#&gt; Model: decision_tree()\n#&gt; \n#&gt; ── Preprocessor ──────────────────────────────────────────────────────\n#&gt; tip ~ .\n#&gt; \n#&gt; ── Model ─────────────────────────────────────────────────────────────\n#&gt; n= 8000 \n#&gt; \n#&gt; node), split, n, loss, yval, (yprob)\n#&gt;       * denotes terminal node\n#&gt; \n#&gt;  1) root 8000 616 yes (0.92300000 0.07700000)  \n#&gt;    2) distance&gt;=14.12 2041  68 yes (0.96668300 0.03331700) *\n#&gt;    3) distance&lt; 14.12 5959 548 yes (0.90803826 0.09196174)  \n#&gt;      6) distance&lt; 5.275 5419 450 yes (0.91695885 0.08304115) *\n#&gt;      7) distance&gt;=5.275 540  98 yes (0.81851852 0.18148148)  \n#&gt;       14) company=Chicago Independents,City Service,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc,other 478  68 yes (0.85774059 0.14225941) *\n#&gt;       15) company=Flash Cab 62  30 yes (0.51612903 0.48387097)  \n#&gt;         30) dow=Thu 12   2 yes (0.83333333 0.16666667) *\n#&gt;         31) dow=Sun,Mon,Tue,Wed,Fri,Sat 50  22 no (0.44000000 0.56000000)  \n#&gt;           62) distance&gt;=11.77 14   4 yes (0.71428571 0.28571429) *\n#&gt;           63) distance&lt; 11.77 36  12 no (0.33333333 0.66666667) *"
  },
  {
    "objectID": "SD/5.1_model/index.html#预测",
    "href": "SD/5.1_model/index.html#预测",
    "title": "模型构建",
    "section": "预测",
    "text": "预测\nHow do you use your new tree_fit model?\n\ntree_spec &lt;-\n  decision_tree(cost_complexity = 0.002) %&gt;%\n  set_mode(\"classification\")\n\ntree_fit &lt;-\n  workflow(tip ~ ., tree_spec) %&gt;%\n  fit(data = taxi_train)"
  },
  {
    "objectID": "SD/5.1_model/index.html#练习-1",
    "href": "SD/5.1_model/index.html#练习-1",
    "title": "模型构建",
    "section": "练习",
    "text": "练习\nRun:\npredict(tree_fit, new_data = taxi_test)\n\nRun:\naugment(tree_fit, new_data = taxi_test)\nWhat do you get?"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels-的预测",
    "href": "SD/5.1_model/index.html#tidymodels-的预测",
    "title": "模型构建",
    "section": "tidymodels 的预测",
    "text": "tidymodels 的预测\n\n预测结果始终在一个 tibble 内\n列名和类型可读性强\nnew_data 中的行数和输出中的行数相同"
  },
  {
    "objectID": "SD/5.1_model/index.html#理解模型",
    "href": "SD/5.1_model/index.html#理解模型",
    "title": "模型构建",
    "section": "理解模型",
    "text": "理解模型\n如何 理解tree_fit 模型？"
  },
  {
    "objectID": "SD/5.1_model/index.html#evaluating-models-预测值",
    "href": "SD/5.1_model/index.html#evaluating-models-预测值",
    "title": "模型构建",
    "section": "Evaluating models: 预测值",
    "text": "Evaluating models: 预测值\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  relocate(tip, .pred_class, .pred_yes, .pred_no)\n\n#&gt; # A tibble: 8,000 × 10\n#&gt;    tip   .pred_class .pred_yes .pred_no distance company local dow   month  hour\n#&gt;    &lt;fct&gt; &lt;fct&gt;           &lt;dbl&gt;    &lt;dbl&gt;    &lt;dbl&gt; &lt;fct&gt;   &lt;fct&gt; &lt;fct&gt; &lt;fct&gt; &lt;int&gt;\n#&gt;  1 yes   yes             0.967   0.0333    17.2  Chicag… no    Thu   Feb      16\n#&gt;  2 yes   yes             0.935   0.0646     0.88 City S… yes   Thu   Mar       8\n#&gt;  3 yes   yes             0.967   0.0333    18.1  other   no    Mon   Feb      18\n#&gt;  4 yes   yes             0.949   0.0507    12.2  Chicag… no    Sun   Mar      21\n#&gt;  5 yes   yes             0.821   0.179      0.94 Sun Ta… yes   Sat   Apr      23\n#&gt;  6 yes   yes             0.967   0.0333    17.5  Flash … no    Fri   Mar      12\n#&gt;  7 yes   yes             0.967   0.0333    17.7  other   no    Sun   Jan       6\n#&gt;  8 yes   yes             0.938   0.0616     1.85 Taxica… no    Fri   Apr      12\n#&gt;  9 yes   yes             0.938   0.0616     0.53 Sun Ta… no    Tue   Mar      18\n#&gt; 10 yes   yes             0.931   0.0694     6.65 Taxica… no    Sun   Apr      11\n#&gt; # ℹ 7,990 more rows"
  },
  {
    "objectID": "SD/5.1_model/index.html#confusion-matrix",
    "href": "SD/5.1_model/index.html#confusion-matrix",
    "title": "模型构建",
    "section": "Confusion matrix",
    "text": "Confusion matrix"
  },
  {
    "objectID": "SD/5.1_model/index.html#confusion-matrix-1",
    "href": "SD/5.1_model/index.html#confusion-matrix-1",
    "title": "模型构建",
    "section": "Confusion matrix",
    "text": "Confusion matrix\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  conf_mat(truth = tip, estimate = .pred_class)\n\n#&gt;           Truth\n#&gt; Prediction  yes   no\n#&gt;        yes 7341  536\n#&gt;        no    43   80"
  },
  {
    "objectID": "SD/5.1_model/index.html#confusion-matrix-2",
    "href": "SD/5.1_model/index.html#confusion-matrix-2",
    "title": "模型构建",
    "section": "Confusion matrix",
    "text": "Confusion matrix\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  conf_mat(truth = tip, estimate = .pred_class) %&gt;%\n  autoplot(type = \"heatmap\")"
  },
  {
    "objectID": "SD/5.1_model/index.html#metrics-for-model-performance",
    "href": "SD/5.1_model/index.html#metrics-for-model-performance",
    "title": "模型构建",
    "section": "Metrics for model performance",
    "text": "Metrics for model performance\n\n\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  accuracy(truth = tip, estimate = .pred_class)\n\n#&gt; # A tibble: 1 × 3\n#&gt;   .metric  .estimator .estimate\n#&gt;   &lt;chr&gt;    &lt;chr&gt;          &lt;dbl&gt;\n#&gt; 1 accuracy binary         0.928"
  },
  {
    "objectID": "SD/5.1_model/index.html#二分类模型评估",
    "href": "SD/5.1_model/index.html#二分类模型评估",
    "title": "模型构建",
    "section": "二分类模型评估",
    "text": "二分类模型评估\n模型的敏感性（Sensitivity）和特异性（Specificity）是评估二分类模型性能的重要指标：\n\n敏感性（Sensitivity），也称为真阳性率，衡量了模型正确识别正类别样本的能力。公式为真阳性数除以真阳性数加上假阴性数：\n\n\\[\n\\text{Sensitivity} = \\frac{\\text{True Positives}}{\\text{True Positives} + \\text{False Negatives}}\n\\]\n\n特异性（Specificity），也称为真阴性率，衡量了模型正确识别负类别样本的能力。公式为真阴性数除以真阴性数加上假阳性数：\n\n\\[\n\\text{Specificity} = \\frac{\\text{True Negatives}}{\\text{True Negatives} + \\text{False Positives}}\n\\]\n在评估模型时，我们希望敏感性和特异性都很高。高敏感性表示模型能够捕获真正的正类别样本，高特异性表示模型能够准确排除负类别样本。"
  },
  {
    "objectID": "SD/5.1_model/index.html#metrics-for-model-performance-1",
    "href": "SD/5.1_model/index.html#metrics-for-model-performance-1",
    "title": "模型构建",
    "section": "Metrics for model performance",
    "text": "Metrics for model performance\n\n\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  sensitivity(truth = tip, estimate = .pred_class)\n\n#&gt; # A tibble: 1 × 3\n#&gt;   .metric     .estimator .estimate\n#&gt;   &lt;chr&gt;       &lt;chr&gt;          &lt;dbl&gt;\n#&gt; 1 sensitivity binary         0.994"
  },
  {
    "objectID": "SD/5.1_model/index.html#metrics-for-model-performance-2",
    "href": "SD/5.1_model/index.html#metrics-for-model-performance-2",
    "title": "模型构建",
    "section": "Metrics for model performance",
    "text": "Metrics for model performance\n\n\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  sensitivity(truth = tip, estimate = .pred_class)\n\n#&gt; # A tibble: 1 × 3\n#&gt;   .metric     .estimator .estimate\n#&gt;   &lt;chr&gt;       &lt;chr&gt;          &lt;dbl&gt;\n#&gt; 1 sensitivity binary         0.994\n\n\n\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  specificity(truth = tip, estimate = .pred_class)\n\n#&gt; # A tibble: 1 × 3\n#&gt;   .metric     .estimator .estimate\n#&gt;   &lt;chr&gt;       &lt;chr&gt;          &lt;dbl&gt;\n#&gt; 1 specificity binary         0.130"
  },
  {
    "objectID": "SD/5.1_model/index.html#metrics-for-model-performance-3",
    "href": "SD/5.1_model/index.html#metrics-for-model-performance-3",
    "title": "模型构建",
    "section": "Metrics for model performance",
    "text": "Metrics for model performance\nWe can use metric_set() to combine multiple calculations into one\n\ntaxi_metrics &lt;- metric_set(accuracy, specificity, sensitivity)\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  taxi_metrics(truth = tip, estimate = .pred_class)\n\n#&gt; # A tibble: 3 × 3\n#&gt;   .metric     .estimator .estimate\n#&gt;   &lt;chr&gt;       &lt;chr&gt;          &lt;dbl&gt;\n#&gt; 1 accuracy    binary         0.928\n#&gt; 2 specificity binary         0.130\n#&gt; 3 sensitivity binary         0.994"
  },
  {
    "objectID": "SD/5.1_model/index.html#metrics-for-model-performance-4",
    "href": "SD/5.1_model/index.html#metrics-for-model-performance-4",
    "title": "模型构建",
    "section": "Metrics for model performance",
    "text": "Metrics for model performance\n\ntaxi_metrics &lt;- metric_set(accuracy, specificity, sensitivity)\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  group_by(local) %&gt;%\n  taxi_metrics(truth = tip, estimate = .pred_class)\n\n#&gt; # A tibble: 6 × 4\n#&gt;   local .metric     .estimator .estimate\n#&gt;   &lt;fct&gt; &lt;chr&gt;       &lt;chr&gt;          &lt;dbl&gt;\n#&gt; 1 yes   accuracy    binary         0.898\n#&gt; 2 no    accuracy    binary         0.935\n#&gt; 3 yes   specificity binary         0.169\n#&gt; 4 no    specificity binary         0.116\n#&gt; 5 yes   sensitivity binary         0.987\n#&gt; 6 no    sensitivity binary         0.996"
  },
  {
    "objectID": "SD/5.1_model/index.html#varying-the-threshold",
    "href": "SD/5.1_model/index.html#varying-the-threshold",
    "title": "模型构建",
    "section": "Varying the threshold",
    "text": "Varying the threshold"
  },
  {
    "objectID": "SD/5.1_model/index.html#roc-曲线",
    "href": "SD/5.1_model/index.html#roc-曲线",
    "title": "模型构建",
    "section": "ROC 曲线",
    "text": "ROC 曲线\n\nROC（Receiver Operating Characteristic）曲线用于评估二分类模型的性能，特别是在不同的阈值下比较模型的敏感性和特异性。\nROC曲线的横轴是假阳性率（False Positive Rate，FPR），纵轴是真阳性率（True Positive Rate，TPR）。在ROC曲线上，每个点对应于一个特定的阈值。通过改变阈值，我们可以观察到模型在不同条件下的表现。\nROC曲线越接近左上角（0,1）点，说明模型的性能越好，因为这表示在较低的假阳性率下，模型能够获得较高的真阳性率。ROC曲线下面积（Area Under the ROC Curve，AUC）也是评估模型性能的一种指标，AUC值越大表示模型性能越好。"
  },
  {
    "objectID": "SD/5.1_model/index.html#roc-curve-plot",
    "href": "SD/5.1_model/index.html#roc-curve-plot",
    "title": "模型构建",
    "section": "ROC curve plot",
    "text": "ROC curve plot\n\n\naugment(taxi_fit, new_data = taxi_train) %&gt;%\n  roc_curve(truth = tip, .pred_yes) %&gt;%\n  autoplot()"
  },
  {
    "objectID": "SD/5.1_model/index.html#过度拟合",
    "href": "SD/5.1_model/index.html#过度拟合",
    "title": "模型构建",
    "section": "过度拟合",
    "text": "过度拟合"
  },
  {
    "objectID": "SD/5.1_model/index.html#过度拟合-1",
    "href": "SD/5.1_model/index.html#过度拟合-1",
    "title": "模型构建",
    "section": "过度拟合",
    "text": "过度拟合"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation",
    "href": "SD/5.1_model/index.html#cross-validation",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation-1",
    "href": "SD/5.1_model/index.html#cross-validation-1",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation-2",
    "href": "SD/5.1_model/index.html#cross-validation-2",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation-3",
    "href": "SD/5.1_model/index.html#cross-validation-3",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation\n\nvfold_cv(taxi_train) # v = 10 is default\n\n#&gt; #  10-fold cross-validation \n#&gt; # A tibble: 10 × 2\n#&gt;    splits             id    \n#&gt;    &lt;list&gt;             &lt;chr&gt; \n#&gt;  1 &lt;split [7200/800]&gt; Fold01\n#&gt;  2 &lt;split [7200/800]&gt; Fold02\n#&gt;  3 &lt;split [7200/800]&gt; Fold03\n#&gt;  4 &lt;split [7200/800]&gt; Fold04\n#&gt;  5 &lt;split [7200/800]&gt; Fold05\n#&gt;  6 &lt;split [7200/800]&gt; Fold06\n#&gt;  7 &lt;split [7200/800]&gt; Fold07\n#&gt;  8 &lt;split [7200/800]&gt; Fold08\n#&gt;  9 &lt;split [7200/800]&gt; Fold09\n#&gt; 10 &lt;split [7200/800]&gt; Fold10"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation-4",
    "href": "SD/5.1_model/index.html#cross-validation-4",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation\nWhat is in this?\n\ntaxi_folds &lt;- vfold_cv(taxi_train)\ntaxi_folds$splits[1:3]\n\n#&gt; [[1]]\n#&gt; &lt;Analysis/Assess/Total&gt;\n#&gt; &lt;7200/800/8000&gt;\n#&gt; \n#&gt; [[2]]\n#&gt; &lt;Analysis/Assess/Total&gt;\n#&gt; &lt;7200/800/8000&gt;\n#&gt; \n#&gt; [[3]]\n#&gt; &lt;Analysis/Assess/Total&gt;\n#&gt; &lt;7200/800/8000&gt;\n\n\n\nTalk about a list column, storing non-atomic types in dataframe"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation-5",
    "href": "SD/5.1_model/index.html#cross-validation-5",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation\n\nvfold_cv(taxi_train, v = 5)\n\n#&gt; #  5-fold cross-validation \n#&gt; # A tibble: 5 × 2\n#&gt;   splits              id   \n#&gt;   &lt;list&gt;              &lt;chr&gt;\n#&gt; 1 &lt;split [6400/1600]&gt; Fold1\n#&gt; 2 &lt;split [6400/1600]&gt; Fold2\n#&gt; 3 &lt;split [6400/1600]&gt; Fold3\n#&gt; 4 &lt;split [6400/1600]&gt; Fold4\n#&gt; 5 &lt;split [6400/1600]&gt; Fold5"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation-6",
    "href": "SD/5.1_model/index.html#cross-validation-6",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation\n\nvfold_cv(taxi_train, strata = tip)\n\n#&gt; #  10-fold cross-validation using stratification \n#&gt; # A tibble: 10 × 2\n#&gt;    splits             id    \n#&gt;    &lt;list&gt;             &lt;chr&gt; \n#&gt;  1 &lt;split [7200/800]&gt; Fold01\n#&gt;  2 &lt;split [7200/800]&gt; Fold02\n#&gt;  3 &lt;split [7200/800]&gt; Fold03\n#&gt;  4 &lt;split [7200/800]&gt; Fold04\n#&gt;  5 &lt;split [7200/800]&gt; Fold05\n#&gt;  6 &lt;split [7200/800]&gt; Fold06\n#&gt;  7 &lt;split [7200/800]&gt; Fold07\n#&gt;  8 &lt;split [7200/800]&gt; Fold08\n#&gt;  9 &lt;split [7200/800]&gt; Fold09\n#&gt; 10 &lt;split [7200/800]&gt; Fold10\n\n\n\nStratification often helps, with very little downside"
  },
  {
    "objectID": "SD/5.1_model/index.html#cross-validation-7",
    "href": "SD/5.1_model/index.html#cross-validation-7",
    "title": "模型构建",
    "section": "Cross-validation",
    "text": "Cross-validation\nWe’ll use this setup:\n\nset.seed(123)\ntaxi_folds &lt;- vfold_cv(taxi_train, v = 10, strata = tip)\ntaxi_folds\n\n#&gt; #  10-fold cross-validation using stratification \n#&gt; # A tibble: 10 × 2\n#&gt;    splits             id    \n#&gt;    &lt;list&gt;             &lt;chr&gt; \n#&gt;  1 &lt;split [7200/800]&gt; Fold01\n#&gt;  2 &lt;split [7200/800]&gt; Fold02\n#&gt;  3 &lt;split [7200/800]&gt; Fold03\n#&gt;  4 &lt;split [7200/800]&gt; Fold04\n#&gt;  5 &lt;split [7200/800]&gt; Fold05\n#&gt;  6 &lt;split [7200/800]&gt; Fold06\n#&gt;  7 &lt;split [7200/800]&gt; Fold07\n#&gt;  8 &lt;split [7200/800]&gt; Fold08\n#&gt;  9 &lt;split [7200/800]&gt; Fold09\n#&gt; 10 &lt;split [7200/800]&gt; Fold10\n\n\n\nSet the seed when creating resamples"
  },
  {
    "objectID": "SD/5.1_model/index.html#fit-our-model-to-the-resamples",
    "href": "SD/5.1_model/index.html#fit-our-model-to-the-resamples",
    "title": "模型构建",
    "section": "Fit our model to the resamples",
    "text": "Fit our model to the resamples\n\ntaxi_res &lt;- fit_resamples(taxi_wflow, taxi_folds)\ntaxi_res\n\n#&gt; # Resampling results\n#&gt; # 10-fold cross-validation using stratification \n#&gt; # A tibble: 10 × 4\n#&gt;    splits             id     .metrics         .notes          \n#&gt;    &lt;list&gt;             &lt;chr&gt;  &lt;list&gt;           &lt;list&gt;          \n#&gt;  1 &lt;split [7200/800]&gt; Fold01 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  2 &lt;split [7200/800]&gt; Fold02 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  3 &lt;split [7200/800]&gt; Fold03 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  4 &lt;split [7200/800]&gt; Fold04 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  5 &lt;split [7200/800]&gt; Fold05 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  6 &lt;split [7200/800]&gt; Fold06 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  7 &lt;split [7200/800]&gt; Fold07 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  8 &lt;split [7200/800]&gt; Fold08 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt;  9 &lt;split [7200/800]&gt; Fold09 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;\n#&gt; 10 &lt;split [7200/800]&gt; Fold10 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#evaluating-model-performance",
    "href": "SD/5.1_model/index.html#evaluating-model-performance",
    "title": "模型构建",
    "section": "Evaluating model performance",
    "text": "Evaluating model performance\n\ntaxi_res %&gt;%\n  collect_metrics()\n\n#&gt; # A tibble: 3 × 6\n#&gt;   .metric     .estimator   mean     n std_err .config             \n#&gt;   &lt;chr&gt;       &lt;chr&gt;       &lt;dbl&gt; &lt;int&gt;   &lt;dbl&gt; &lt;chr&gt;               \n#&gt; 1 accuracy    binary     0.915     10 0.00309 Preprocessor1_Model1\n#&gt; 2 brier_class binary     0.0721    10 0.00245 Preprocessor1_Model1\n#&gt; 3 roc_auc     binary     0.624     10 0.0105  Preprocessor1_Model1\n\n\n\ncollect_metrics() 是一套 collect_() 函数之一，可用于处理调参结果的列。调参结果中以 . 为前缀的大多数列都有对应的 collect_() 函数，可以进行常见摘要选项的汇总。\n\n\nWe can reliably measure performance using only the training data 🎉"
  },
  {
    "objectID": "SD/5.1_model/index.html#comparing-metrics",
    "href": "SD/5.1_model/index.html#comparing-metrics",
    "title": "模型构建",
    "section": "Comparing metrics",
    "text": "Comparing metrics\nHow do the metrics from resampling compare to the metrics from training and testing?\n\n\n\ntaxi_res %&gt;%\n  collect_metrics() %&gt;%\n  select(.metric, mean, n)\n\n#&gt; # A tibble: 3 × 3\n#&gt;   .metric       mean     n\n#&gt;   &lt;chr&gt;        &lt;dbl&gt; &lt;int&gt;\n#&gt; 1 accuracy    0.915     10\n#&gt; 2 brier_class 0.0721    10\n#&gt; 3 roc_auc     0.624     10\n\n\n\nThe ROC AUC previously was\n\n0.69 for the training set\n0.64 for test set\n\n\n\nRemember that:\n⚠️ the training set gives you overly optimistic metrics\n⚠️ the test set is precious"
  },
  {
    "objectID": "SD/5.1_model/index.html#evaluating-model-performance-1",
    "href": "SD/5.1_model/index.html#evaluating-model-performance-1",
    "title": "模型构建",
    "section": "Evaluating model performance",
    "text": "Evaluating model performance\n\n# Save the assessment set results\nctrl_taxi &lt;- control_resamples(save_pred = TRUE)\ntaxi_res &lt;- fit_resamples(taxi_wflow, taxi_folds, control = ctrl_taxi)\n\ntaxi_res\n\n#&gt; # Resampling results\n#&gt; # 10-fold cross-validation using stratification \n#&gt; # A tibble: 10 × 5\n#&gt;    splits             id     .metrics         .notes           .predictions\n#&gt;    &lt;list&gt;             &lt;chr&gt;  &lt;list&gt;           &lt;list&gt;           &lt;list&gt;      \n#&gt;  1 &lt;split [7200/800]&gt; Fold01 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  2 &lt;split [7200/800]&gt; Fold02 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  3 &lt;split [7200/800]&gt; Fold03 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  4 &lt;split [7200/800]&gt; Fold04 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  5 &lt;split [7200/800]&gt; Fold05 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  6 &lt;split [7200/800]&gt; Fold06 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  7 &lt;split [7200/800]&gt; Fold07 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  8 &lt;split [7200/800]&gt; Fold08 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  9 &lt;split [7200/800]&gt; Fold09 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt; 10 &lt;split [7200/800]&gt; Fold10 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#evaluating-model-performance-2",
    "href": "SD/5.1_model/index.html#evaluating-model-performance-2",
    "title": "模型构建",
    "section": "Evaluating model performance",
    "text": "Evaluating model performance\n\n# Save the assessment set results\ntaxi_preds &lt;- collect_predictions(taxi_res)\ntaxi_preds\n\n#&gt; # A tibble: 8,000 × 7\n#&gt;    .pred_class .pred_yes .pred_no id      .row tip   .config             \n#&gt;    &lt;fct&gt;           &lt;dbl&gt;    &lt;dbl&gt; &lt;chr&gt;  &lt;int&gt; &lt;fct&gt; &lt;chr&gt;               \n#&gt;  1 yes             0.938   0.0615 Fold01    14 yes   Preprocessor1_Model1\n#&gt;  2 yes             0.946   0.0544 Fold01    19 yes   Preprocessor1_Model1\n#&gt;  3 yes             0.973   0.0269 Fold01    33 yes   Preprocessor1_Model1\n#&gt;  4 yes             0.903   0.0971 Fold01    43 yes   Preprocessor1_Model1\n#&gt;  5 yes             0.973   0.0269 Fold01    74 yes   Preprocessor1_Model1\n#&gt;  6 yes             0.903   0.0971 Fold01   103 yes   Preprocessor1_Model1\n#&gt;  7 yes             0.915   0.0851 Fold01   104 no    Preprocessor1_Model1\n#&gt;  8 yes             0.903   0.0971 Fold01   124 yes   Preprocessor1_Model1\n#&gt;  9 yes             0.667   0.333  Fold01   126 yes   Preprocessor1_Model1\n#&gt; 10 yes             0.949   0.0510 Fold01   128 yes   Preprocessor1_Model1\n#&gt; # ℹ 7,990 more rows"
  },
  {
    "objectID": "SD/5.1_model/index.html#evaluating-model-performance-3",
    "href": "SD/5.1_model/index.html#evaluating-model-performance-3",
    "title": "模型构建",
    "section": "Evaluating model performance",
    "text": "Evaluating model performance\n\ntaxi_preds %&gt;%\n  group_by(id) %&gt;%\n  taxi_metrics(truth = tip, estimate = .pred_class)\n\n#&gt; # A tibble: 30 × 4\n#&gt;    id     .metric  .estimator .estimate\n#&gt;    &lt;chr&gt;  &lt;chr&gt;    &lt;chr&gt;          &lt;dbl&gt;\n#&gt;  1 Fold01 accuracy binary         0.905\n#&gt;  2 Fold02 accuracy binary         0.925\n#&gt;  3 Fold03 accuracy binary         0.926\n#&gt;  4 Fold04 accuracy binary         0.915\n#&gt;  5 Fold05 accuracy binary         0.902\n#&gt;  6 Fold06 accuracy binary         0.912\n#&gt;  7 Fold07 accuracy binary         0.906\n#&gt;  8 Fold08 accuracy binary         0.91 \n#&gt;  9 Fold09 accuracy binary         0.918\n#&gt; 10 Fold10 accuracy binary         0.931\n#&gt; # ℹ 20 more rows"
  },
  {
    "objectID": "SD/5.1_model/index.html#where-are-the-fitted-models",
    "href": "SD/5.1_model/index.html#where-are-the-fitted-models",
    "title": "模型构建",
    "section": "Where are the fitted models?",
    "text": "Where are the fitted models?\n\ntaxi_res\n\n#&gt; # Resampling results\n#&gt; # 10-fold cross-validation using stratification \n#&gt; # A tibble: 10 × 5\n#&gt;    splits             id     .metrics         .notes           .predictions\n#&gt;    &lt;list&gt;             &lt;chr&gt;  &lt;list&gt;           &lt;list&gt;           &lt;list&gt;      \n#&gt;  1 &lt;split [7200/800]&gt; Fold01 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  2 &lt;split [7200/800]&gt; Fold02 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  3 &lt;split [7200/800]&gt; Fold03 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  4 &lt;split [7200/800]&gt; Fold04 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  5 &lt;split [7200/800]&gt; Fold05 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  6 &lt;split [7200/800]&gt; Fold06 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  7 &lt;split [7200/800]&gt; Fold07 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  8 &lt;split [7200/800]&gt; Fold08 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt;  9 &lt;split [7200/800]&gt; Fold09 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;    \n#&gt; 10 &lt;split [7200/800]&gt; Fold10 &lt;tibble [3 × 4]&gt; &lt;tibble [0 × 3]&gt; &lt;tibble&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#bootstrapping",
    "href": "SD/5.1_model/index.html#bootstrapping",
    "title": "模型构建",
    "section": "Bootstrapping",
    "text": "Bootstrapping"
  },
  {
    "objectID": "SD/5.1_model/index.html#bootstrapping-1",
    "href": "SD/5.1_model/index.html#bootstrapping-1",
    "title": "模型构建",
    "section": "Bootstrapping",
    "text": "Bootstrapping\n\nset.seed(3214)\nbootstraps(taxi_train)\n\n#&gt; # Bootstrap sampling \n#&gt; # A tibble: 25 × 2\n#&gt;    splits              id         \n#&gt;    &lt;list&gt;              &lt;chr&gt;      \n#&gt;  1 &lt;split [8000/2902]&gt; Bootstrap01\n#&gt;  2 &lt;split [8000/2916]&gt; Bootstrap02\n#&gt;  3 &lt;split [8000/3004]&gt; Bootstrap03\n#&gt;  4 &lt;split [8000/2979]&gt; Bootstrap04\n#&gt;  5 &lt;split [8000/2961]&gt; Bootstrap05\n#&gt;  6 &lt;split [8000/2962]&gt; Bootstrap06\n#&gt;  7 &lt;split [8000/3026]&gt; Bootstrap07\n#&gt;  8 &lt;split [8000/2926]&gt; Bootstrap08\n#&gt;  9 &lt;split [8000/2972]&gt; Bootstrap09\n#&gt; 10 &lt;split [8000/2972]&gt; Bootstrap10\n#&gt; # ℹ 15 more rows"
  },
  {
    "objectID": "SD/5.1_model/index.html#monte-carlo-cross-validation",
    "href": "SD/5.1_model/index.html#monte-carlo-cross-validation",
    "title": "模型构建",
    "section": "Monte Carlo Cross-Validation",
    "text": "Monte Carlo Cross-Validation\n\nset.seed(322)\nmc_cv(taxi_train, times = 10)\n\n#&gt; # Monte Carlo cross-validation (0.75/0.25) with 10 resamples \n#&gt; # A tibble: 10 × 2\n#&gt;    splits              id        \n#&gt;    &lt;list&gt;              &lt;chr&gt;     \n#&gt;  1 &lt;split [6000/2000]&gt; Resample01\n#&gt;  2 &lt;split [6000/2000]&gt; Resample02\n#&gt;  3 &lt;split [6000/2000]&gt; Resample03\n#&gt;  4 &lt;split [6000/2000]&gt; Resample04\n#&gt;  5 &lt;split [6000/2000]&gt; Resample05\n#&gt;  6 &lt;split [6000/2000]&gt; Resample06\n#&gt;  7 &lt;split [6000/2000]&gt; Resample07\n#&gt;  8 &lt;split [6000/2000]&gt; Resample08\n#&gt;  9 &lt;split [6000/2000]&gt; Resample09\n#&gt; 10 &lt;split [6000/2000]&gt; Resample10"
  },
  {
    "objectID": "SD/5.1_model/index.html#validation-set",
    "href": "SD/5.1_model/index.html#validation-set",
    "title": "模型构建",
    "section": "Validation set",
    "text": "Validation set\n\nset.seed(853)\ntaxi_val_split &lt;- initial_validation_split(taxi, strata = tip)\nvalidation_set(taxi_val_split)\n\n#&gt; # A tibble: 1 × 2\n#&gt;   splits              id        \n#&gt;   &lt;list&gt;              &lt;chr&gt;     \n#&gt; 1 &lt;split [6000/2000]&gt; validation"
  },
  {
    "objectID": "SD/5.1_model/index.html#create-a-random-forest-model",
    "href": "SD/5.1_model/index.html#create-a-random-forest-model",
    "title": "模型构建",
    "section": "Create a random forest model",
    "text": "Create a random forest model\n\nrf_spec &lt;- rand_forest(trees = 1000, mode = \"classification\")\nrf_spec\n\n#&gt; Random Forest Model Specification (classification)\n#&gt; \n#&gt; Main Arguments:\n#&gt;   trees = 1000\n#&gt; \n#&gt; Computational engine: ranger"
  },
  {
    "objectID": "SD/5.1_model/index.html#create-a-random-forest-model-1",
    "href": "SD/5.1_model/index.html#create-a-random-forest-model-1",
    "title": "模型构建",
    "section": "Create a random forest model",
    "text": "Create a random forest model\n\nrf_wflow &lt;- workflow(tip ~ ., rf_spec)\nrf_wflow\n\n#&gt; ══ Workflow ══════════════════════════════════════════════════════════\n#&gt; Preprocessor: Formula\n#&gt; Model: rand_forest()\n#&gt; \n#&gt; ── Preprocessor ──────────────────────────────────────────────────────\n#&gt; tip ~ .\n#&gt; \n#&gt; ── Model ─────────────────────────────────────────────────────────────\n#&gt; Random Forest Model Specification (classification)\n#&gt; \n#&gt; Main Arguments:\n#&gt;   trees = 1000\n#&gt; \n#&gt; Computational engine: ranger"
  },
  {
    "objectID": "SD/5.1_model/index.html#evaluating-model-performance-4",
    "href": "SD/5.1_model/index.html#evaluating-model-performance-4",
    "title": "模型构建",
    "section": "Evaluating model performance",
    "text": "Evaluating model performance\n\nctrl_taxi &lt;- control_resamples(save_pred = TRUE)\n\n# Random forest uses random numbers so set the seed first\n\nset.seed(2)\nrf_res &lt;- fit_resamples(rf_wflow, taxi_folds, control = ctrl_taxi)\ncollect_metrics(rf_res)\n\n#&gt; # A tibble: 3 × 6\n#&gt;   .metric     .estimator   mean     n std_err .config             \n#&gt;   &lt;chr&gt;       &lt;chr&gt;       &lt;dbl&gt; &lt;int&gt;   &lt;dbl&gt; &lt;chr&gt;               \n#&gt; 1 accuracy    binary     0.923     10 0.00317 Preprocessor1_Model1\n#&gt; 2 brier_class binary     0.0706    10 0.00243 Preprocessor1_Model1\n#&gt; 3 roc_auc     binary     0.616     10 0.0147  Preprocessor1_Model1"
  },
  {
    "objectID": "SD/5.1_model/index.html#the-whole-game---status-update",
    "href": "SD/5.1_model/index.html#the-whole-game---status-update",
    "title": "模型构建",
    "section": "The whole game - status update",
    "text": "The whole game - status update"
  },
  {
    "objectID": "SD/5.1_model/index.html#the-final-fit",
    "href": "SD/5.1_model/index.html#the-final-fit",
    "title": "模型构建",
    "section": "The final fit",
    "text": "The final fit\n\n# taxi_split has train + test info\nfinal_fit &lt;- last_fit(rf_wflow, taxi_split)\n\nfinal_fit\n\n#&gt; # Resampling results\n#&gt; # Manual resampling \n#&gt; # A tibble: 1 × 6\n#&gt;   splits              id               .metrics .notes   .predictions .workflow \n#&gt;   &lt;list&gt;              &lt;chr&gt;            &lt;list&gt;   &lt;list&gt;   &lt;list&gt;       &lt;list&gt;    \n#&gt; 1 &lt;split [8000/2000]&gt; train/test split &lt;tibble&gt; &lt;tibble&gt; &lt;tibble&gt;     &lt;workflow&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#何为final_fit",
    "href": "SD/5.1_model/index.html#何为final_fit",
    "title": "模型构建",
    "section": "何为final_fit?",
    "text": "何为final_fit?\n\ncollect_metrics(final_fit)\n\n#&gt; # A tibble: 3 × 4\n#&gt;   .metric     .estimator .estimate .config             \n#&gt;   &lt;chr&gt;       &lt;chr&gt;          &lt;dbl&gt; &lt;chr&gt;               \n#&gt; 1 accuracy    binary        0.914  Preprocessor1_Model1\n#&gt; 2 roc_auc     binary        0.638  Preprocessor1_Model1\n#&gt; 3 brier_class binary        0.0772 Preprocessor1_Model1\n\n\n\nThese are metrics computed with the test set"
  },
  {
    "objectID": "SD/5.1_model/index.html#何为final_fit-1",
    "href": "SD/5.1_model/index.html#何为final_fit-1",
    "title": "模型构建",
    "section": "何为final_fit?",
    "text": "何为final_fit?\n\ncollect_predictions(final_fit)\n\n#&gt; # A tibble: 2,000 × 7\n#&gt;    .pred_class .pred_yes .pred_no id                .row tip   .config          \n#&gt;    &lt;fct&gt;           &lt;dbl&gt;    &lt;dbl&gt; &lt;chr&gt;            &lt;int&gt; &lt;fct&gt; &lt;chr&gt;            \n#&gt;  1 yes             0.957   0.0426 train/test split     4 yes   Preprocessor1_Mo…\n#&gt;  2 yes             0.938   0.0621 train/test split    10 yes   Preprocessor1_Mo…\n#&gt;  3 yes             0.958   0.0416 train/test split    19 yes   Preprocessor1_Mo…\n#&gt;  4 yes             0.894   0.106  train/test split    23 yes   Preprocessor1_Mo…\n#&gt;  5 yes             0.943   0.0573 train/test split    28 yes   Preprocessor1_Mo…\n#&gt;  6 yes             0.979   0.0213 train/test split    34 yes   Preprocessor1_Mo…\n#&gt;  7 yes             0.954   0.0463 train/test split    35 yes   Preprocessor1_Mo…\n#&gt;  8 yes             0.928   0.0722 train/test split    38 yes   Preprocessor1_Mo…\n#&gt;  9 yes             0.985   0.0147 train/test split    40 yes   Preprocessor1_Mo…\n#&gt; 10 yes             0.948   0.0523 train/test split    42 no    Preprocessor1_Mo…\n#&gt; # ℹ 1,990 more rows"
  },
  {
    "objectID": "SD/5.1_model/index.html#何为final_fit-2",
    "href": "SD/5.1_model/index.html#何为final_fit-2",
    "title": "模型构建",
    "section": "何为final_fit?",
    "text": "何为final_fit?\n\nextract_workflow(final_fit)\n\n#&gt; ══ Workflow [trained] ════════════════════════════════════════════════\n#&gt; Preprocessor: Formula\n#&gt; Model: rand_forest()\n#&gt; \n#&gt; ── Preprocessor ──────────────────────────────────────────────────────\n#&gt; tip ~ .\n#&gt; \n#&gt; ── Model ─────────────────────────────────────────────────────────────\n#&gt; Ranger result\n#&gt; \n#&gt; Call:\n#&gt;  ranger::ranger(x = maybe_data_frame(x), y = y, num.trees = ~1000,      num.threads = 1, verbose = FALSE, seed = sample.int(10^5,          1), probability = TRUE) \n#&gt; \n#&gt; Type:                             Probability estimation \n#&gt; Number of trees:                  1000 \n#&gt; Sample size:                      8000 \n#&gt; Number of independent variables:  6 \n#&gt; Mtry:                             2 \n#&gt; Target node size:                 10 \n#&gt; Variable importance mode:         none \n#&gt; Splitrule:                        gini \n#&gt; OOB prediction error (Brier s.):  0.07069778\n\n\n\nUse this for prediction on new data, like for deploying"
  },
  {
    "objectID": "SD/5.1_model/index.html#tuning-models---specifying-tuning-parameters",
    "href": "SD/5.1_model/index.html#tuning-models---specifying-tuning-parameters",
    "title": "模型构建",
    "section": "Tuning models - Specifying tuning parameters",
    "text": "Tuning models - Specifying tuning parameters\n\nrf_spec &lt;- rand_forest(min_n = tune()) %&gt;%\n  set_mode(\"classification\")\n\nrf_wflow &lt;- workflow(tip ~ ., rf_spec)\nrf_wflow\n\n#&gt; ══ Workflow ══════════════════════════════════════════════════════════\n#&gt; Preprocessor: Formula\n#&gt; Model: rand_forest()\n#&gt; \n#&gt; ── Preprocessor ──────────────────────────────────────────────────────\n#&gt; tip ~ .\n#&gt; \n#&gt; ── Model ─────────────────────────────────────────────────────────────\n#&gt; Random Forest Model Specification (classification)\n#&gt; \n#&gt; Main Arguments:\n#&gt;   min_n = tune()\n#&gt; \n#&gt; Computational engine: ranger"
  },
  {
    "objectID": "SD/5.1_model/index.html#try-out-multiple-values",
    "href": "SD/5.1_model/index.html#try-out-multiple-values",
    "title": "模型构建",
    "section": "Try out multiple values",
    "text": "Try out multiple values\ntune_grid() works similar to fit_resamples() but covers multiple parameter values:\n\nset.seed(22)\nrf_res &lt;- tune_grid(\n  rf_wflow,\n  taxi_folds,\n  grid = 5\n)"
  },
  {
    "objectID": "SD/5.1_model/index.html#compare-results",
    "href": "SD/5.1_model/index.html#compare-results",
    "title": "模型构建",
    "section": "Compare results",
    "text": "Compare results\nInspecting results and selecting the best-performing hyperparameter(s):\n\nshow_best(rf_res)\n\n#&gt; # A tibble: 5 × 7\n#&gt;   min_n .metric .estimator  mean     n std_err .config             \n#&gt;   &lt;int&gt; &lt;chr&gt;   &lt;chr&gt;      &lt;dbl&gt; &lt;int&gt;   &lt;dbl&gt; &lt;chr&gt;               \n#&gt; 1    40 roc_auc binary     0.623    10  0.0163 Preprocessor1_Model1\n#&gt; 2    22 roc_auc binary     0.622    10  0.0151 Preprocessor1_Model5\n#&gt; 3    31 roc_auc binary     0.621    10  0.0152 Preprocessor1_Model2\n#&gt; 4    12 roc_auc binary     0.617    10  0.0149 Preprocessor1_Model4\n#&gt; 5     3 roc_auc binary     0.609    10  0.0144 Preprocessor1_Model3\n\nbest_parameter &lt;- select_best(rf_res)\nbest_parameter\n\n#&gt; # A tibble: 1 × 2\n#&gt;   min_n .config             \n#&gt;   &lt;int&gt; &lt;chr&gt;               \n#&gt; 1    40 Preprocessor1_Model1\n\n\ncollect_metrics() and autoplot() are also available."
  },
  {
    "objectID": "SD/5.1_model/index.html#the-final-fit-1",
    "href": "SD/5.1_model/index.html#the-final-fit-1",
    "title": "模型构建",
    "section": "The final fit",
    "text": "The final fit\n\nrf_wflow &lt;- finalize_workflow(rf_wflow, best_parameter)\n\nfinal_fit &lt;- last_fit(rf_wflow, taxi_split)\n\ncollect_metrics(final_fit)\n\n#&gt; # A tibble: 3 × 4\n#&gt;   .metric     .estimator .estimate .config             \n#&gt;   &lt;chr&gt;       &lt;chr&gt;          &lt;dbl&gt; &lt;chr&gt;               \n#&gt; 1 accuracy    binary        0.913  Preprocessor1_Model1\n#&gt; 2 roc_auc     binary        0.647  Preprocessor1_Model1\n#&gt; 3 brier_class binary        0.0762 Preprocessor1_Model1"
  },
  {
    "objectID": "SD/5.1_model/index.html#数据",
    "href": "SD/5.1_model/index.html#数据",
    "title": "模型构建",
    "section": "数据",
    "text": "数据\n\nrequire(tidyverse)\nsitedf &lt;- readr::read_csv(\n  \"https://www.epa.gov/sites/default/files/2014-01/nla2007_sampledlakeinformation_20091113.csv\"\n) |&gt;\n  select(\n    SITE_ID,\n    lon = LON_DD,\n    lat = LAT_DD,\n    name = LAKENAME,\n    area = LAKEAREA,\n    zmax = DEPTHMAX\n  ) |&gt;\n  group_by(SITE_ID) |&gt;\n  summarize(\n    lon = mean(lon, na.rm = TRUE),\n    lat = mean(lat, na.rm = TRUE),\n    name = unique(name),\n    area = mean(area, na.rm = TRUE),\n    zmax = mean(zmax, na.rm = TRUE)\n  )\n\n\nvisitdf &lt;- readr::read_csv(\n  \"https://www.epa.gov/sites/default/files/2013-09/nla2007_profile_20091008.csv\"\n) |&gt;\n  select(SITE_ID, date = DATE_PROFILE, year = YEAR, visit = VISIT_NO) |&gt;\n  distinct()\n\n\nwaterchemdf &lt;- readr::read_csv(\n  \"https://www.epa.gov/sites/default/files/2013-09/nla2007_profile_20091008.csv\"\n) |&gt;\n  select(\n    SITE_ID,\n    date = DATE_PROFILE,\n    depth = DEPTH,\n    temp = TEMP_FIELD,\n    do = DO_FIELD,\n    ph = PH_FIELD,\n    cond = COND_FIELD,\n  )\n\nsddf &lt;- readr::read_csv(\n  \"https://www.epa.gov/sites/default/files/2014-10/nla2007_secchi_20091008.csv\"\n) |&gt;\n  select(\n    SITE_ID,\n    date = DATE_SECCHI,\n    sd = SECMEAN,\n    clear_to_bottom = CLEAR_TO_BOTTOM\n  )\n\ntrophicdf &lt;- readr::read_csv(\n  \"https://www.epa.gov/sites/default/files/2014-10/nla2007_trophic_conditionestimate_20091123.csv\"\n) |&gt;\n  select(SITE_ID, visit = VISIT_NO, tp = PTL, tn = NTL, chla = CHLA) |&gt;\n  left_join(visitdf, by = c(\"SITE_ID\", \"visit\")) |&gt;\n  select(-year, -visit) |&gt;\n  group_by(SITE_ID, date) |&gt;\n  summarize(\n    tp = mean(tp, na.rm = TRUE),\n    tn = mean(tn, na.rm = TRUE),\n    chla = mean(chla, na.rm = TRUE)\n  )\n\n\nphytodf &lt;- readr::read_csv(\n  \"https://www.epa.gov/sites/default/files/2014-10/nla2007_phytoplankton_softalgaecount_20091023.csv\"\n) |&gt;\n  select(\n    SITE_ID,\n    date = DATEPHYT,\n    depth = SAMPLE_DEPTH,\n    phyta = DIVISION,\n    genus = GENUS,\n    species = SPECIES,\n    tax = TAXANAME,\n    abund = ABUND\n  ) |&gt;\n  mutate(phyta = gsub(\" .*$\", \"\", phyta)) |&gt;\n  filter(!is.na(genus)) |&gt;\n  group_by(SITE_ID, date, depth, phyta, genus) |&gt;\n  summarize(abund = sum(abund, na.rm = TRUE)) |&gt;\n  nest(phytodf = -c(SITE_ID, date))\n\nenvdf &lt;- waterchemdf |&gt;\n  filter(depth &lt; 2) |&gt;\n  select(-depth) |&gt;\n  group_by(SITE_ID, date) |&gt;\n  summarise_all(~ mean(., na.rm = TRUE)) |&gt;\n  ungroup() |&gt;\n  left_join(sddf, by = c(\"SITE_ID\", \"date\")) |&gt;\n  left_join(trophicdf, by = c(\"SITE_ID\", \"date\"))\n\nnla &lt;- envdf |&gt;\n  left_join(phytodf) |&gt;\n  left_join(sitedf, by = \"SITE_ID\") |&gt;\n  filter(!purrr::map_lgl(phytodf, is.null)) |&gt;\n  mutate(\n    cyanophyta = purrr::map(\n      phytodf,\n      ~ .x |&gt;\n        dplyr::filter(phyta == \"Cyanophyta\") |&gt;\n        summarize(cyanophyta = sum(abund, na.rm = TRUE))\n    )\n  ) |&gt;\n  unnest(cyanophyta) |&gt;\n  select(-phyta) |&gt;\n  mutate(clear_to_bottom = ifelse(is.na(clear_to_bottom), TRUE, FALSE))\n\n# library(rmdify)\n# library(dwfun)\n# dwfun::init()"
  },
  {
    "objectID": "SD/5.1_model/index.html#数据-1",
    "href": "SD/5.1_model/index.html#数据-1",
    "title": "模型构建",
    "section": "数据",
    "text": "数据\n\nskimr::skim(nla)\n\n\nData summary\n\n\nName\nnla\n\n\nNumber of rows\n1208\n\n\nNumber of columns\n19\n\n\n_______________________\n\n\n\nColumn type frequency:\n\n\n\ncharacter\n3\n\n\nlist\n1\n\n\nlogical\n1\n\n\nnumeric\n14\n\n\n________________________\n\n\n\nGroup variables\nNone\n\n\n\nVariable type: character\n\n\n\n\n\n\n\n\n\n\n\n\n\nskim_variable\nn_missing\ncomplete_rate\nmin\nmax\nempty\nn_unique\nwhitespace\n\n\n\n\nSITE_ID\n0\n1.00\n12\n24\n0\n1114\n0\n\n\ndate\n0\n1.00\n8\n10\n0\n116\n0\n\n\nname\n44\n0.96\n5\n48\n0\n990\n0\n\n\n\nVariable type: list\n\n\n\n\n\n\n\n\n\n\n\nskim_variable\nn_missing\ncomplete_rate\nn_unique\nmin_length\nmax_length\n\n\n\n\nphytodf\n0\n1\n1207\n4\n4\n\n\n\nVariable type: logical\n\n\n\nskim_variable\nn_missing\ncomplete_rate\nmean\ncount\n\n\n\n\nclear_to_bottom\n0\n1\n0.96\nTRU: 1154, FAL: 54\n\n\n\nVariable type: numeric\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nskim_variable\nn_missing\ncomplete_rate\nmean\nsd\np0\np25\np50\np75\np100\nhist\n\n\n\n\ntemp\n1\n1.00\n24.13\n4.06\n10.95\n21.43\n24.53\n27.20\n37.73\n▁▅▇▅▁\n\n\ndo\n54\n0.96\n7.84\n1.97\n0.77\n6.85\n7.88\n8.70\n21.00\n▁▇▂▁▁\n\n\nph\n3\n1.00\n8.08\n0.88\n4.10\n7.55\n8.25\n8.64\n10.33\n▁▁▅▇▂\n\n\ncond\n247\n0.80\n714.37\n2499.57\n3.00\n86.93\n219.40\n471.00\n42487.75\n▇▁▁▁▁\n\n\nsd\n62\n0.95\n2.15\n2.49\n0.04\n0.60\n1.35\n2.75\n36.71\n▇▁▁▁▁\n\n\ntp\n0\n1.00\n112.77\n301.34\n1.00\n10.00\n25.00\n90.00\n4865.00\n▇▁▁▁▁\n\n\ntn\n0\n1.00\n1174.39\n2061.71\n5.00\n317.75\n584.00\n1174.25\n26100.00\n▇▁▁▁▁\n\n\nchla\n5\n1.00\n29.91\n69.27\n0.07\n2.96\n7.79\n26.08\n936.00\n▇▁▁▁▁\n\n\nlon\n0\n1.00\n-94.34\n14.08\n-124.25\n-103.12\n-94.48\n-84.32\n-67.70\n▃▃▇▆▃\n\n\nlat\n0\n1.00\n40.55\n5.02\n26.94\n37.12\n41.31\n44.64\n48.98\n▁▃▆▇▆\n\n\narea\n0\n1.00\n12.01\n78.53\n0.04\n0.24\n0.70\n2.87\n1674.90\n▇▁▁▁▁\n\n\nzmax\n0\n1.00\n9.41\n10.13\n0.50\n2.90\n5.90\n12.00\n97.00\n▇▁▁▁▁\n\n\ndepth\n9\n0.99\n1.58\n0.59\n0.08\n1.13\n2.00\n2.00\n2.00\n▁▂▂▁▇\n\n\ncyanophyta\n0\n1.00\n38382.63\n191373.91\n0.66\n1200.61\n5483.81\n23504.81\n4982222.22\n▇▁▁▁▁"
  },
  {
    "objectID": "SD/5.1_model/index.html#简单模型",
    "href": "SD/5.1_model/index.html#简单模型",
    "title": "模型构建",
    "section": "简单模型",
    "text": "简单模型\n\nnla |&gt;\n  filter(tp &gt; 1) |&gt;\n  ggplot(aes(tn, tp)) +\n  geom_point() +\n  geom_smooth(method = \"lm\") +\n  scale_x_log10(\n    breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n    labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n  ) +\n  scale_y_log10(\n    breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n    labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n  )\n\n\n\n\n\n\n\nm1 &lt;- lm(log10(tp) ~ log10(tn), data = nla)\n\nsummary(m1)\n\n#&gt; \n#&gt; Call:\n#&gt; lm(formula = log10(tp) ~ log10(tn), data = nla)\n#&gt; \n#&gt; Residuals:\n#&gt;     Min      1Q  Median      3Q     Max \n#&gt; -1.8063 -0.2360  0.0125  0.2245  1.9140 \n#&gt; \n#&gt; Coefficients:\n#&gt;             Estimate Std. Error t value Pr(&gt;|t|)    \n#&gt; (Intercept) -1.92315    0.07166  -26.84   &lt;2e-16 ***\n#&gt; log10(tn)    1.21700    0.02528   48.13   &lt;2e-16 ***\n#&gt; ---\n#&gt; Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1\n#&gt; \n#&gt; Residual standard error: 0.405 on 1206 degrees of freedom\n#&gt; Multiple R-squared:  0.6576, Adjusted R-squared:  0.6574 \n#&gt; F-statistic:  2317 on 1 and 1206 DF,  p-value: &lt; 2.2e-16"
  },
  {
    "objectID": "SD/5.1_model/index.html#复杂指标",
    "href": "SD/5.1_model/index.html#复杂指标",
    "title": "模型构建",
    "section": "复杂指标",
    "text": "复杂指标\n\nnla |&gt;\n  filter(tp &gt; 1) |&gt;\n  ggplot(aes(tp, cyanophyta)) +\n  geom_point() +\n  geom_smooth(method = \"lm\") +\n  scale_x_log10(\n    breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n    labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n  ) +\n  scale_y_log10(\n    breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n    labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n  )\n\n\n\n\n\n\n\nm2 &lt;- lm(log10(cyanophyta) ~ log10(tp), data = nla)\n\nsummary(m2)\n\n#&gt; \n#&gt; Call:\n#&gt; lm(formula = log10(cyanophyta) ~ log10(tp), data = nla)\n#&gt; \n#&gt; Residuals:\n#&gt;     Min      1Q  Median      3Q     Max \n#&gt; -5.1551 -0.5128  0.1407  0.6546  3.1811 \n#&gt; \n#&gt; Coefficients:\n#&gt;             Estimate Std. Error t value Pr(&gt;|t|)    \n#&gt; (Intercept)  2.82739    0.06181   45.74   &lt;2e-16 ***\n#&gt; log10(tp)    0.58577    0.03784   15.48   &lt;2e-16 ***\n#&gt; ---\n#&gt; Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1\n#&gt; \n#&gt; Residual standard error: 0.9095 on 1206 degrees of freedom\n#&gt; Multiple R-squared:  0.1658, Adjusted R-squared:  0.1651 \n#&gt; F-statistic: 239.7 on 1 and 1206 DF,  p-value: &lt; 2.2e-16"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---data-split",
    "href": "SD/5.1_model/index.html#tidymodels---data-split",
    "title": "模型构建",
    "section": "tidymodels - Data split",
    "text": "tidymodels - Data split\n\n(nla_split &lt;- rsample::initial_split(nla, prop = 0.7, strata = zmax))\n\n#&gt; &lt;Training/Testing/Total&gt;\n#&gt; &lt;844/364/1208&gt;\n\n(nla_train &lt;- training(nla_split))\n\n#&gt; # A tibble: 844 × 19\n#&gt;    SITE_ID    date   temp      do    ph   cond    sd clear_to_bottom    tp    tn\n#&gt;    &lt;chr&gt;      &lt;chr&gt; &lt;dbl&gt;   &lt;dbl&gt; &lt;dbl&gt;  &lt;dbl&gt; &lt;dbl&gt; &lt;lgl&gt;           &lt;dbl&gt; &lt;dbl&gt;\n#&gt;  1 NLA06608-… 9/6/…  30.0   9      8.4  1220.   0.49 TRUE               50   843\n#&gt;  2 NLA06608-… 9/14…  22.7 NaN      5.8    44.5  1.05 TRUE               20   264\n#&gt;  3 NLA06608-… 9/4/…  25.1 NaN      5.26   45.5  0.65 TRUE               28   384\n#&gt;  4 NLA06608-… 8/6/…  21.6   7.6    9.4  9080    0.85 TRUE              175  4147\n#&gt;  5 NLA06608-… 6/11…  22.9   4.75   8.38 3373    0.35 TRUE              801  7047\n#&gt;  6 NLA06608-… 9/19…  27.6   8.18   8.4   182    1.3  TRUE               24   562\n#&gt;  7 NLA06608-… 7/2/…  24.6   8.28   7.68  157.   0.27 TRUE              247  2106\n#&gt;  8 NLA06608-… 9/11…  27.4  10      9.5   148    0.25 TRUE              162  2146\n#&gt;  9 NLA06608-… 7/17…  20.4   0.767  6.6   110.   0.7  TRUE               67   835\n#&gt; 10 NLA06608-… 7/30…  24.1   9.97   8.37  281.   0.1  TRUE              523  6741\n#&gt; # ℹ 834 more rows\n#&gt; # ℹ 9 more variables: chla &lt;dbl&gt;, phytodf &lt;list&gt;, lon &lt;dbl&gt;, lat &lt;dbl&gt;,\n#&gt; #   name &lt;chr&gt;, area &lt;dbl&gt;, zmax &lt;dbl&gt;, depth &lt;dbl&gt;, cyanophyta &lt;dbl&gt;\n\n(nla_test &lt;- testing(nla_split))\n\n#&gt; # A tibble: 364 × 19\n#&gt;    SITE_ID     date   temp     do    ph   cond    sd clear_to_bottom    tp    tn\n#&gt;    &lt;chr&gt;       &lt;chr&gt; &lt;dbl&gt;  &lt;dbl&gt; &lt;dbl&gt;  &lt;dbl&gt; &lt;dbl&gt; &lt;lgl&gt;           &lt;dbl&gt; &lt;dbl&gt;\n#&gt;  1 NLA06608-0… 6/14…  22.2 NaN     5.52   62.1  0.55 TRUE               36   695\n#&gt;  2 NLA06608-0… 7/23…  24.8 NaN     5.07   46.0  0.45 TRUE               22   469\n#&gt;  3 NLA06608-0… 8/29…  30.1   7.5   8.35 1128.   0.71 TRUE               43   738\n#&gt;  4 NLA06608-0… 7/10…  20.6   6.7   8.3   296    1.8  TRUE               18   344\n#&gt;  5 NLA06608-0… 8/18…  24.7   8.85  8.5   612.   2.6  TRUE               10   485\n#&gt;  6 NLA06608-0… 8/23…  18.1   8.4   9.4  9052.   0.63 TRUE              175  4456\n#&gt;  7 NLA06608-0… 8/7/…  21.2   4.71  9.03 3125.   0.55 TRUE             1376  6578\n#&gt;  8 NLA06608-0… 6/11…  25.2   8.6   8     214    0.69 TRUE               30   605\n#&gt;  9 NLA06608-0… 7/27…  25.3   8.85  7.93  369    7.1  TRUE                7   390\n#&gt; 10 NLA06608-0… 8/30…  23.5   8.2   7.9   NaN    4.75 TRUE               11   463\n#&gt; # ℹ 354 more rows\n#&gt; # ℹ 9 more variables: chla &lt;dbl&gt;, phytodf &lt;list&gt;, lon &lt;dbl&gt;, lat &lt;dbl&gt;,\n#&gt; #   name &lt;chr&gt;, area &lt;dbl&gt;, zmax &lt;dbl&gt;, depth &lt;dbl&gt;, cyanophyta &lt;dbl&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---recipe",
    "href": "SD/5.1_model/index.html#tidymodels---recipe",
    "title": "模型构建",
    "section": "tidymodels - recipe",
    "text": "tidymodels - recipe\n\nnla_formula &lt;- as.formula(\n  \"cyanophyta ~ temp + do + ph + cond + sd + tp + tn + chla + clear_to_bottom\"\n)\n# nla_formula &lt;- as.formula(\"cyanophyta ~ temp + do + ph + cond + sd + tp + tn\")\nnla_recipe &lt;- recipes::recipe(nla_formula, data = nla_train) |&gt;\n  recipes::step_string2factor(all_nominal()) |&gt;\n  recipes::step_nzv(all_nominal()) |&gt;\n  recipes::step_log(chla, cyanophyta, base = 10) |&gt;\n  recipes::step_normalize(all_numeric_predictors()) |&gt;\n  prep()\nnla_recipe"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---cross-validation",
    "href": "SD/5.1_model/index.html#tidymodels---cross-validation",
    "title": "模型构建",
    "section": "tidymodels - cross validation",
    "text": "tidymodels - cross validation\n\nnla_cv &lt;- recipes::bake(\n  nla_recipe,\n  new_data = training(nla_split)\n) |&gt;\n  rsample::vfold_cv(v = 10)\nnla_cv\n\n#&gt; #  10-fold cross-validation \n#&gt; # A tibble: 10 × 2\n#&gt;    splits           id    \n#&gt;    &lt;list&gt;           &lt;chr&gt; \n#&gt;  1 &lt;split [759/85]&gt; Fold01\n#&gt;  2 &lt;split [759/85]&gt; Fold02\n#&gt;  3 &lt;split [759/85]&gt; Fold03\n#&gt;  4 &lt;split [759/85]&gt; Fold04\n#&gt;  5 &lt;split [760/84]&gt; Fold05\n#&gt;  6 &lt;split [760/84]&gt; Fold06\n#&gt;  7 &lt;split [760/84]&gt; Fold07\n#&gt;  8 &lt;split [760/84]&gt; Fold08\n#&gt;  9 &lt;split [760/84]&gt; Fold09\n#&gt; 10 &lt;split [760/84]&gt; Fold10"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---model-specification",
    "href": "SD/5.1_model/index.html#tidymodels---model-specification",
    "title": "模型构建",
    "section": "tidymodels - Model specification",
    "text": "tidymodels - Model specification\n\nxgboost_model &lt;- parsnip::boost_tree(\n  mode = \"regression\",\n  trees = 1000,\n  min_n = tune(),\n  tree_depth = tune(),\n  learn_rate = tune(),\n  loss_reduction = tune()\n) |&gt;\n  set_engine(\"xgboost\", objective = \"reg:squarederror\")\nxgboost_model\n\n#&gt; Boosted Tree Model Specification (regression)\n#&gt; \n#&gt; Main Arguments:\n#&gt;   trees = 1000\n#&gt;   min_n = tune()\n#&gt;   tree_depth = tune()\n#&gt;   learn_rate = tune()\n#&gt;   loss_reduction = tune()\n#&gt; \n#&gt; Engine-Specific Arguments:\n#&gt;   objective = reg:squarederror\n#&gt; \n#&gt; Computational engine: xgboost"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---grid-specification",
    "href": "SD/5.1_model/index.html#tidymodels---grid-specification",
    "title": "模型构建",
    "section": "tidymodels - Grid specification",
    "text": "tidymodels - Grid specification\n\n# grid specification\nxgboost_params &lt;- dials::parameters(\n  min_n(),\n  tree_depth(),\n  learn_rate(),\n  loss_reduction()\n)\nxgboost_params"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---grid-specification-1",
    "href": "SD/5.1_model/index.html#tidymodels---grid-specification-1",
    "title": "模型构建",
    "section": "tidymodels - Grid specification",
    "text": "tidymodels - Grid specification\n\nxgboost_grid &lt;- dials::grid_max_entropy(\n  xgboost_params,\n  size = 60\n)\nknitr::kable(head(xgboost_grid))\n\n\n\n\nmin_n\ntree_depth\nlearn_rate\nloss_reduction\n\n\n\n\n11\n8\n0.0000000\n0.9340165\n\n\n19\n3\n0.0000004\n0.0000000\n\n\n10\n12\n0.0000000\n25.6175732\n\n\n23\n2\n0.0000000\n0.0000000\n\n\n8\n2\n0.0161978\n0.3890567\n\n\n39\n4\n0.0000068\n0.0461147"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---workflow",
    "href": "SD/5.1_model/index.html#tidymodels---workflow",
    "title": "模型构建",
    "section": "tidymodels - Workflow",
    "text": "tidymodels - Workflow\n\nxgboost_wf &lt;- workflows::workflow() |&gt;\n  add_model(xgboost_model) |&gt;\n  add_formula(nla_formula)\nxgboost_wf\n\n#&gt; ══ Workflow ══════════════════════════════════════════════════════════\n#&gt; Preprocessor: Formula\n#&gt; Model: boost_tree()\n#&gt; \n#&gt; ── Preprocessor ──────────────────────────────────────────────────────\n#&gt; cyanophyta ~ temp + do + ph + cond + sd + tp + tn + chla + clear_to_bottom\n#&gt; \n#&gt; ── Model ─────────────────────────────────────────────────────────────\n#&gt; Boosted Tree Model Specification (regression)\n#&gt; \n#&gt; Main Arguments:\n#&gt;   trees = 1000\n#&gt;   min_n = tune()\n#&gt;   tree_depth = tune()\n#&gt;   learn_rate = tune()\n#&gt;   loss_reduction = tune()\n#&gt; \n#&gt; Engine-Specific Arguments:\n#&gt;   objective = reg:squarederror\n#&gt; \n#&gt; Computational engine: xgboost"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---tune",
    "href": "SD/5.1_model/index.html#tidymodels---tune",
    "title": "模型构建",
    "section": "tidymodels - Tune",
    "text": "tidymodels - Tune\n\n# hyperparameter tuning\nif (FALSE) {\n  xgboost_tuned &lt;- tune::tune_grid(\n    object = xgboost_wf,\n    resamples = nla_cv,\n    grid = xgboost_grid,\n    metrics = yardstick::metric_set(rmse, rsq, mae),\n    control = tune::control_grid(verbose = TRUE)\n  )\n  saveRDS(xgboost_tuned, \"./xgboost_tuned.RDS\")\n}\nxgboost_tuned &lt;- readRDS(\"./xgboost_tuned.RDS\")"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---best-model",
    "href": "SD/5.1_model/index.html#tidymodels---best-model",
    "title": "模型构建",
    "section": "tidymodels - Best model",
    "text": "tidymodels - Best model\n\nxgboost_tuned |&gt;\n  tune::show_best(metric = \"rmse\") |&gt;\n  knitr::kable()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmin_n\ntree_depth\nlearn_rate\nloss_reduction\n.metric\n.estimator\nmean\nn\nstd_err\n.config\n\n\n\n\n11\n1\n0.0120291\n0.0000001\nrmse\nstandard\n0.7946305\n10\n0.0091198\nPreprocessor1_Model28\n\n\n12\n1\n0.0247860\n0.0000000\nrmse\nstandard\n0.7976293\n10\n0.0083676\nPreprocessor1_Model56\n\n\n39\n1\n0.0194065\n0.0000000\nrmse\nstandard\n0.8022666\n10\n0.0078647\nPreprocessor1_Model08\n\n\n34\n6\n0.0969629\n8.1171897\nrmse\nstandard\n0.8060259\n10\n0.0117724\nPreprocessor1_Model48\n\n\n32\n14\n0.0087588\n0.0003154\nrmse\nstandard\n0.8240243\n10\n0.0100750\nPreprocessor1_Model57"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---best-model-1",
    "href": "SD/5.1_model/index.html#tidymodels---best-model-1",
    "title": "模型构建",
    "section": "tidymodels - Best model",
    "text": "tidymodels - Best model\n\nxgboost_tuned |&gt;\n  collect_metrics()\n\n#&gt; # A tibble: 180 × 10\n#&gt;    min_n tree_depth learn_rate loss_reduction .metric .estimator    mean     n\n#&gt;    &lt;int&gt;      &lt;int&gt;      &lt;dbl&gt;          &lt;dbl&gt; &lt;chr&gt;   &lt;chr&gt;        &lt;dbl&gt; &lt;int&gt;\n#&gt;  1    31          3   9.20e- 5        3.09e-9 mae     standard     2.93     10\n#&gt;  2    31          3   9.20e- 5        3.09e-9 rmse    standard     3.09     10\n#&gt;  3    31          3   9.20e- 5        3.09e-9 rsq     standard     0.325    10\n#&gt;  4    36         14   2.61e-10        2.60e-8 mae     standard     3.21     10\n#&gt;  5    36         14   2.61e-10        2.60e-8 rmse    standard     3.36     10\n#&gt;  6    36         14   2.61e-10        2.60e-8 rsq     standard   NaN         0\n#&gt;  7    32          4   1.55e- 4        1.18e+1 mae     standard     2.76     10\n#&gt;  8    32          4   1.55e- 4        1.18e+1 rmse    standard     2.91     10\n#&gt;  9    32          4   1.55e- 4        1.18e+1 rsq     standard     0.323    10\n#&gt; 10    35          6   1.11e-10        1.22e-8 mae     standard     3.21     10\n#&gt; # ℹ 170 more rows\n#&gt; # ℹ 2 more variables: std_err &lt;dbl&gt;, .config &lt;chr&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---best-model-2",
    "href": "SD/5.1_model/index.html#tidymodels---best-model-2",
    "title": "模型构建",
    "section": "tidymodels - Best model",
    "text": "tidymodels - Best model\n\nxgboost_tuned |&gt;\n  autoplot()"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---best-model-3",
    "href": "SD/5.1_model/index.html#tidymodels---best-model-3",
    "title": "模型构建",
    "section": "tidymodels - Best model",
    "text": "tidymodels - Best model\n\nxgboost_best_params &lt;- xgboost_tuned |&gt;\n  tune::select_best(metric = \"rmse\")\n\nknitr::kable(xgboost_best_params)\n\n\n\n\nmin_n\ntree_depth\nlearn_rate\nloss_reduction\n.config\n\n\n\n\n11\n1\n0.0120291\n1e-07\nPreprocessor1_Model28"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---final-model",
    "href": "SD/5.1_model/index.html#tidymodels---final-model",
    "title": "模型构建",
    "section": "tidymodels - Final model",
    "text": "tidymodels - Final model\n\nxgboost_model_final &lt;- xgboost_model |&gt;\n  finalize_model(xgboost_best_params)\nxgboost_model_final\n\n#&gt; Boosted Tree Model Specification (regression)\n#&gt; \n#&gt; Main Arguments:\n#&gt;   trees = 1000\n#&gt;   min_n = 11\n#&gt;   tree_depth = 1\n#&gt;   learn_rate = 0.0120291137490354\n#&gt;   loss_reduction = 6.99604840409217e-08\n#&gt; \n#&gt; Engine-Specific Arguments:\n#&gt;   objective = reg:squarederror\n#&gt; \n#&gt; Computational engine: xgboost"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---train-evaluation",
    "href": "SD/5.1_model/index.html#tidymodels---train-evaluation",
    "title": "模型构建",
    "section": "tidymodels - Train evaluation",
    "text": "tidymodels - Train evaluation\n\n(train_processed &lt;- bake(nla_recipe, new_data = nla_train))\n\n#&gt; # A tibble: 844 × 10\n#&gt;       temp      do     ph   cond     sd     tp     tn     chla clear_to_bottom\n#&gt;      &lt;dbl&gt;   &lt;dbl&gt;  &lt;dbl&gt;  &lt;dbl&gt;  &lt;dbl&gt;  &lt;dbl&gt;  &lt;dbl&gt;    &lt;dbl&gt; &lt;lgl&gt;          \n#&gt;  1  1.43     0.629  0.381  0.185 -0.657 -0.220 -0.145  0.244   TRUE           \n#&gt;  2 -0.379  NaN     -2.64  -0.258 -0.435 -0.322 -0.437 -0.00415 TRUE           \n#&gt;  3  0.226  NaN     -3.27  -0.258 -0.594 -0.294 -0.377  0.389   TRUE           \n#&gt;  4 -0.652   -0.103  1.54   3.15  -0.514  0.206  1.52  -0.00789 TRUE           \n#&gt;  5 -0.320   -1.59   0.358  0.996 -0.713  2.34   2.98  -0.516   TRUE           \n#&gt;  6  0.847    0.198  0.381 -0.206 -0.336 -0.308 -0.287 -0.749   TRUE           \n#&gt;  7  0.109    0.250 -0.461 -0.216 -0.745  0.451  0.490  1.72    TRUE           \n#&gt;  8  0.810    1.15   1.66  -0.219 -0.753  0.162  0.511  1.63    TRUE           \n#&gt;  9 -0.932   -3.68  -1.71  -0.233 -0.574 -0.162 -0.150  0.00472 TRUE           \n#&gt; 10 -0.0301   1.14   0.343 -0.169 -0.812  1.39   2.82   1.76    TRUE           \n#&gt; # ℹ 834 more rows\n#&gt; # ℹ 1 more variable: cyanophyta &lt;dbl&gt;"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---train-data",
    "href": "SD/5.1_model/index.html#tidymodels---train-data",
    "title": "模型构建",
    "section": "tidymodels - Train data",
    "text": "tidymodels - Train data\n\ntrain_prediction &lt;- xgboost_model_final |&gt;\n  # fit the model on all the training data\n  fit(\n    formula = nla_formula,\n    data = train_processed\n  ) |&gt;\n  # predict the sale prices for the training data\n  predict(new_data = train_processed) |&gt;\n  bind_cols(\n    nla_train |&gt;\n      mutate(.obs = log10(cyanophyta))\n  )\nxgboost_score_train &lt;-\n  train_prediction |&gt;\n  yardstick::metrics(.obs, .pred) |&gt;\n  mutate(.estimate = format(round(.estimate, 2), big.mark = \",\"))\nknitr::kable(xgboost_score_train)\n\n\n\n\n.metric\n.estimator\n.estimate\n\n\n\n\nrmse\nstandard\n0.78\n\n\nrsq\nstandard\n0.40\n\n\nmae\nstandard\n0.62"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---train-evaluation-1",
    "href": "SD/5.1_model/index.html#tidymodels---train-evaluation-1",
    "title": "模型构建",
    "section": "tidymodels - train evaluation",
    "text": "tidymodels - train evaluation\n\ntrain_prediction |&gt;\n  ggplot(aes(.pred, .obs)) +\n  geom_point() +\n  geom_smooth(method = \"lm\")"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---test-data",
    "href": "SD/5.1_model/index.html#tidymodels---test-data",
    "title": "模型构建",
    "section": "tidymodels - test data",
    "text": "tidymodels - test data\n\ntest_processed &lt;- bake(nla_recipe, new_data = nla_test)\n\ntest_prediction &lt;- xgboost_model_final |&gt;\n  # fit the model on all the training data\n  fit(\n    formula = nla_formula,\n    data = train_processed\n  ) |&gt;\n  # use the training model fit to predict the test data\n  predict(new_data = test_processed) |&gt;\n  bind_cols(\n    nla_test |&gt;\n      mutate(.obs = log10(cyanophyta))\n  )\n\n# measure the accuracy of our model using `yardstick`\nxgboost_score &lt;- test_prediction |&gt;\n  yardstick::metrics(.obs, .pred) |&gt;\n  mutate(.estimate = format(round(.estimate, 2), big.mark = \",\"))\n\nknitr::kable(xgboost_score)\n\n\n\n\n.metric\n.estimator\n.estimate\n\n\n\n\nrmse\nstandard\n0.81\n\n\nrsq\nstandard\n0.33\n\n\nmae\nstandard\n0.64"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---evaluation",
    "href": "SD/5.1_model/index.html#tidymodels---evaluation",
    "title": "模型构建",
    "section": "tidymodels - evaluation",
    "text": "tidymodels - evaluation\n\ncyanophyta_prediction_residual &lt;- test_prediction |&gt;\n  arrange(.pred) %&gt;%\n  mutate(residual_pct = (.obs - .pred) / .pred) |&gt;\n  select(.pred, residual_pct)\n\ncyanophyta_prediction_residual |&gt;\n  ggplot(aes(x = .pred, y = residual_pct)) +\n  geom_point() +\n  xlab(\"Predicted Cyanophyta\") +\n  ylab(\"Residual (%)\")"
  },
  {
    "objectID": "SD/5.1_model/index.html#tidymodels---test-evaluation",
    "href": "SD/5.1_model/index.html#tidymodels---test-evaluation",
    "title": "模型构建",
    "section": "tidymodels - test evaluation",
    "text": "tidymodels - test evaluation\n\ntest_prediction |&gt;\n  ggplot(aes(.pred, .obs)) +\n  geom_point() +\n  geom_smooth(method = \"lm\", colour = \"black\")"
  },
  {
    "objectID": "SD/5.1_model/index.html#欢迎讨论",
    "href": "SD/5.1_model/index.html#欢迎讨论",
    "title": "模型构建",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#匹配数字",
    "href": "SD/5.3_大数据分析工具/index.html#匹配数字",
    "title": "大数据分析工具",
    "section": "匹配数字",
    "text": "匹配数字\n匹配数字：\n\n匹配任意数字字符。\n：匹配一个或多个数字字符。\n\n\n匹配字母：\n\n：匹配任意字母、数字或下划线字符。\n+：匹配一个或多个字母、数字或下划线字符。"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#匹配数字-2",
    "href": "SD/5.3_大数据分析工具/index.html#匹配数字-2",
    "title": "大数据分析工具",
    "section": "匹配数字",
    "text": "匹配数字\n匹配空白字符：\n\n：匹配任意空白字符，包括空格、制表符、换行符等。\n+：匹配一个或多个空白字符。\n\n匹配特定字符：\n\n[abc]：匹配字符 a、b 或 c 中的任意一个。\n[a-z]：匹配任意小写字母。\n[A-Z]：匹配任意大写字母。\n0-9：匹配任意数字。"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#匹配数字-3",
    "href": "SD/5.3_大数据分析工具/index.html#匹配数字-3",
    "title": "大数据分析工具",
    "section": "匹配数字",
    "text": "匹配数字\n匹配重复次数：\n\n{n}：匹配前一个字符恰好 n 次。\n{n,}：匹配前一个字符至少 n 次。\n{n,m}：匹配前一个字符至少 n 次，但不超过 m 次。\n\n匹配边界：\n\n^：匹配字符串的开头。\n$：匹配字符串的结尾。"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#匹配数字-4",
    "href": "SD/5.3_大数据分析工具/index.html#匹配数字-4",
    "title": "大数据分析工具",
    "section": "匹配数字",
    "text": "匹配数字\n匹配特殊字符：\n\n：转义特殊字符，使其按字面意义匹配。\n.：匹配任意单个字符。\n|：表示“或”关系，匹配两个或多个表达式之一。\n\n匹配次数：\n\n*：匹配前一个字符零次或多次。\n+：匹配前一个字符一次或多次。\n?：匹配前一个字符零次或一次。"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#匹配数字-5",
    "href": "SD/5.3_大数据分析工具/index.html#匹配数字-5",
    "title": "大数据分析工具",
    "section": "匹配数字",
    "text": "匹配数字\n分组和捕获：\n\n()：将一系列模式组合成一个单元，可与特殊字符一起使用。\n\n预定义字符集：\n\n任意数字，相当于 0-9。\n：任意字母、数字或下划线字符，相当于 [a-zA-Z0-9_]。\n：任意空白字符，相当于 [ 。"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#实例",
    "href": "SD/5.3_大数据分析工具/index.html#实例",
    "title": "大数据分析工具",
    "section": "实例",
    "text": "实例\n\nlibrary(babynames)\n(x &lt;- c(\"apple\", \"apppple\", \"abc123def\"))\n\n[1] \"apple\"     \"apppple\"   \"abc123def\"\n\nx[str_detect(x, \"[0-9]\")]\n\n[1] \"abc123def\"\n\nx[str_detect(x, \"abc[0-9]+\")]\n\n[1] \"abc123def\"\n\nx[str_detect(x, \"pp\")]\n\n[1] \"apple\"   \"apppple\"\n\nx[str_detect(x, \"p{4}\")]\n\n[1] \"apppple\"\n\nx[str_detect(x, \"p{4}\")]\n\n[1] \"apppple\"\n\nx[str_detect(\"apple\", \"ap*\")]\n\n[1] \"apple\"     \"apppple\"   \"abc123def\"\n\nx[str_detect(\"apple\", \"app*\")]\n\n[1] \"apple\"     \"apppple\"   \"abc123def\"\n\nx[str_detect(\"apple\", \"a..le\")]\n\n[1] \"apple\"     \"apppple\"   \"abc123def\""
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#练习",
    "href": "SD/5.3_大数据分析工具/index.html#练习",
    "title": "大数据分析工具",
    "section": "练习",
    "text": "练习\n找出babyname中名字含有ar的行\n\n\n# A tibble: 199,504 × 5\n    year sex   name         n    prop\n   &lt;dbl&gt; &lt;chr&gt; &lt;chr&gt;    &lt;int&gt;   &lt;dbl&gt;\n 1  1880 F     Mary      7065 0.0724 \n 2  1880 F     Margaret  1578 0.0162 \n 3  1880 F     Sarah     1288 0.0132 \n 4  1880 F     Clara     1226 0.0126 \n 5  1880 F     Martha    1040 0.0107 \n 6  1880 F     Carrie     949 0.00972\n 7  1880 F     Pearl      569 0.00583\n 8  1880 F     Marie      471 0.00483\n 9  1880 F     Harriet    319 0.00327\n10  1880 F     Caroline   306 0.00314\n# ℹ 199,494 more rows"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#练习-1",
    "href": "SD/5.3_大数据分析工具/index.html#练习-1",
    "title": "大数据分析工具",
    "section": "练习",
    "text": "练习\n找出babyname中名字含有ar或者以ry结尾的行。\n\n\n# A tibble: 199,504 × 5\n    year sex   name         n    prop\n   &lt;dbl&gt; &lt;chr&gt; &lt;chr&gt;    &lt;int&gt;   &lt;dbl&gt;\n 1  1880 F     Mary      7065 0.0724 \n 2  1880 F     Margaret  1578 0.0162 \n 3  1880 F     Sarah     1288 0.0132 \n 4  1880 F     Clara     1226 0.0126 \n 5  1880 F     Martha    1040 0.0107 \n 6  1880 F     Carrie     949 0.00972\n 7  1880 F     Pearl      569 0.00583\n 8  1880 F     Marie      471 0.00483\n 9  1880 F     Harriet    319 0.00327\n10  1880 F     Caroline   306 0.00314\n# ℹ 199,494 more rows"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#ssh---安全远程连接",
    "href": "SD/5.3_大数据分析工具/index.html#ssh---安全远程连接",
    "title": "大数据分析工具",
    "section": "SSH - 安全远程连接",
    "text": "SSH - 安全远程连接\n# 连接到远程服务器\nssh username@remote.server.com\n\n# 使用特定端口连接\nssh -p 2222 username@remote.server.com\n\n# 执行远程命令\nssh username@server \"ls -l /tmp\"\n案例：\n- 远程管理云服务器\n- 自动化脚本执行"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#windows下的ssh工具---putty",
    "href": "SD/5.3_大数据分析工具/index.html#windows下的ssh工具---putty",
    "title": "大数据分析工具",
    "section": "Windows下的SSH工具 - PuTTY",
    "text": "Windows下的SSH工具 - PuTTY\n\n\n\nPuTTY界面\n\n\n# 主要功能：\n1. 保存会话配置（IP/端口/认证信息）\n2. 支持SSH/Telnet/Serial连接\n3. 公钥认证（配合Pageant使用）\n4. 端口转发（SSH隧道）\n案例：\n- 连接Linux服务器进行管理\n- 建立SSH隧道访问内网资源"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#scp---安全文件传输",
    "href": "SD/5.3_大数据分析工具/index.html#scp---安全文件传输",
    "title": "大数据分析工具",
    "section": "SCP - 安全文件传输",
    "text": "SCP - 安全文件传输\n# 复制本地文件到远程\nscp file.txt username@remote:/path/to/dest\n\n# 从远程复制到本地\nscp username@remote:/path/file.txt .\n\n# 递归复制目录\nscp -r dir/ username@remote:/path/\n案例：\n- 部署网站文件到生产环境\n- 备份远程日志文件"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#windows下的scp工具---winscp",
    "href": "SD/5.3_大数据分析工具/index.html#windows下的scp工具---winscp",
    "title": "大数据分析工具",
    "section": "Windows下的SCP工具 - WinSCP",
    "text": "Windows下的SCP工具 - WinSCP\n\n\n\nWinSCP界面 w:400\n\n\n# 主要特性：\n- 图形化SFTP/SCP客户端\n- 与PuTTY集成\n- 支持拖拽操作\n- 可保存常用连接\n- 批处理脚本功能\n案例：\n- 可视化管理服务器文件\n- 本地与服务器间同步代码"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#windows替代bash的工具",
    "href": "SD/5.3_大数据分析工具/index.html#windows替代bash的工具",
    "title": "大数据分析工具",
    "section": "Windows替代bash的工具",
    "text": "Windows替代bash的工具\n1. Git Bash\n# 包含常用Linux命令\nls, grep, ssh, scp, awk等\n2. WSL (Windows Subsystem for Linux)\n# 完整Linux环境\nsudo apt install python3\n3. Cygwin\n# POSIX兼容环境\ncygwin.com/setup-x86_64.exe"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#windows终端工具推荐",
    "href": "SD/5.3_大数据分析工具/index.html#windows终端工具推荐",
    "title": "大数据分析工具",
    "section": "Windows终端工具推荐",
    "text": "Windows终端工具推荐\n\n\n\n工具\n特点\n适用场景\n\n\n\n\nWindows Terminal\n多标签/色彩支持\n日常开发\n\n\nMobaXterm\n内置X11/插件\n远程开发\n\n\nTabby\n跨平台/主题丰富\n多平台用户\n\n\nConEmu\n高度可定制\n高级用户"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#开发工具跨平台方案",
    "href": "SD/5.3_大数据分析工具/index.html#开发工具跨平台方案",
    "title": "大数据分析工具",
    "section": "开发工具跨平台方案",
    "text": "开发工具跨平台方案\n最佳实践：\n1. 代码编辑器统一使用VS Code（全平台支持）\n- 配合Remote-SSH插件\n2. 数据库工具使用DBeaver/DataGrip\n3. 版本控制使用Git GUI（GitKraken/Fork）\n# 保持环境一致的建议：\n- 使用WSL2开发环境\n- 配置相同的.ssh/config文件\n- 共享相同的IDE配置"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#grep---文本搜索",
    "href": "SD/5.3_大数据分析工具/index.html#grep---文本搜索",
    "title": "大数据分析工具",
    "section": "grep - 文本搜索",
    "text": "grep - 文本搜索\n# 基本搜索\ngrep \"error\" logfile.txt\n\n# 递归搜索目录\ngrep -r \"function\" src/\n\n# 显示行号\ngrep -n \"TODO\" *.py\n\n# 反向匹配\ngrep -v \"success\" results.log\n案例：\n- 在日志中查找错误信息\n- 分析代码库中的特定模式"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#sed---流编辑器",
    "href": "SD/5.3_大数据分析工具/index.html#sed---流编辑器",
    "title": "大数据分析工具",
    "section": "sed - 流编辑器",
    "text": "sed - 流编辑器\n# 替换文本\nsed 's/old/new/g' file.txt\n\n# 删除空行\nsed '/^$/d' file.txt\n\n# 原地编辑文件\nsed -i 's/python/python3/g' script.sh\n案例：\n- 批量重命名文件中的字符串\n- 清理数据文件中的不规范格式"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#awk---文本处理",
    "href": "SD/5.3_大数据分析工具/index.html#awk---文本处理",
    "title": "大数据分析工具",
    "section": "awk - 文本处理",
    "text": "awk - 文本处理\n# 打印特定列\nawk '{print $1,$3}' data.csv\n\n# 条件过滤\nawk '$3 &gt; 100 {print $0}' sales.txt\n\n# 使用分隔符\nawk -F',' '{print $2}' users.csv\n案例：\n- 分析服务器日志统计状态码\n- 处理CSV格式数据"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#find-xargs---文件查找处理",
    "href": "SD/5.3_大数据分析工具/index.html#find-xargs---文件查找处理",
    "title": "大数据分析工具",
    "section": "find & xargs - 文件查找处理",
    "text": "find & xargs - 文件查找处理\n# 查找并删除\nfind . -name \"*.tmp\" -delete\n\n# 查找并处理\nfind /var/log -name \"*.log\" | xargs ls -lh\n\n# 复杂组合\nfind src/ -type f -name \"*.js\" | xargs grep -l \"deprecated\"\n案例：\n- 清理旧临时文件\n- 批量处理项目文件"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#代码编辑器",
    "href": "SD/5.3_大数据分析工具/index.html#代码编辑器",
    "title": "大数据分析工具",
    "section": "代码编辑器",
    "text": "代码编辑器\n\nVS Code：现代轻量级编辑器\n\n丰富的插件生态\n内置Git支持\n\nVim：终端高效编辑器\nvim file.txt\nRStudio：R语言集成环境\nJupyterLab：交互式笔记本环境"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#git版本控制",
    "href": "SD/5.3_大数据分析工具/index.html#git版本控制",
    "title": "大数据分析工具",
    "section": "Git版本控制",
    "text": "Git版本控制\n# 基本工作流\ngit clone https://repo.url\ngit add .\ngit commit -m \"message\"\ngit push\n\n# 分支管理\ngit checkout -b new-feature\ngit merge main\n案例：\n- 团队协作开发\n- 版本回滚与问题追踪"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#mysql数据库",
    "href": "SD/5.3_大数据分析工具/index.html#mysql数据库",
    "title": "大数据分析工具",
    "section": "MySQL数据库",
    "text": "MySQL数据库\n-- 基本查询\nSELECT * FROM users WHERE age &gt; 18;\n\n-- 创建表\nCREATE TABLE products (\n  id INT PRIMARY KEY,\n  name VARCHAR(100)\n);\n\n-- 数据操作\nINSERT INTO products VALUES (1, 'Laptop');\nUPDATE products SET price=999 WHERE id=1;\n案例：\n- Web应用数据存储\n- 数据分析与报表生成"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#案例全国气象数据",
    "href": "SD/5.3_大数据分析工具/index.html#案例全国气象数据",
    "title": "大数据分析工具",
    "section": "案例：全国气象数据",
    "text": "案例：全国气象数据\n\n#!/bin/bash\nlogfn=\"${HOME}/service/log/nationalairquality/nationalairquality.log\"\nworkdirfn=\"${HOME}/service/nationalairquality/\"\nmkdir -p \"$(dirname \"${logfn}\")\"\ntouch \"${logfn}\"\n\necho \"$(date '+%Y-%m-%d %H:%M:%S'): 下载大气质量数据\" &gt;&gt;\"${logfn}\"\n\ndeclare -a citynames\n\ncitynames=(北京市 石家庄市 秦皇岛市)\n\njsonfn=\"${workdirfn}/nationalairquality_$(date '+%Y%d%m%H').json\"\njsonfn=\"nationalairquality_$(date '+%Y%d%m%H').json\"\n# [[ -f \"${jsonfn}\" ]] && rm \"${jsonfn}\"\necho \"[\" &gt;\"${jsonfn}\"\n\nfor cityname in \"${citynames[@]}\"; do\n  echo \"下载${cityname}空气质量数据...\" &gt;&gt;\"${logfn}\"\n  curl \"https://air.cnemc.cn:18007/CityData/GetAQIDataPublishLive?cityName=${cityname}\" \\\n    -H 'Accept: */*' \\\n    -H 'Accept-Language: en-US,en;q=0.9' \\\n    -H 'Connection: keep-alive' \\\n    -H 'Referer: https://air.cnemc.cn:18007/' \\\n    -H 'Sec-Fetch-Dest: empty' \\\n    -H 'Sec-Fetch-Mode: cors' \\\n    -H 'Sec-Fetch-Site: same-origin' \\\n    -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36' \\\n    -H 'X-Requested-With: XMLHttpRequest' \\\n    -H 'sec-ch-ua: \"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"' \\\n    -H 'sec-ch-ua-mobile: ?0' \\\n    -H 'sec-ch-ua-platform: \"macOS\"' \\\n    --compressed --silent | jq | sed -e '1d' -e '$d' -e 's/^\\( *}\\)$/\\1,/' &gt;&gt;\"${jsonfn}\"\ndone\nsed -i '' '$s/},/}/' \"${jsonfn}\"\necho \"]\" &gt;&gt;\"${jsonfn}\"\n\necho \"大气质量数据下载完成！\" &gt;&gt;\"${logfn}\"\necho \"开始上传数据库...\" &gt;&gt;\"${logfn}\"\n/home/ming/bin/getnationalairquality.R \"${jsonfn}\"\necho \"上传数据库完毕！\" &gt;&gt;\"${logfn}\""
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#r代码",
    "href": "SD/5.3_大数据分析工具/index.html#r代码",
    "title": "大数据分析工具",
    "section": "R代码",
    "text": "R代码\n\n#!/usr/bin/Rscript\n\njsonfn &lt;- commandArgs(TRUE)[1]\n# jsonfn &lt;- \"~/nationalairquality_2023191219.json\"\njsondf &lt;- jsonlite::fromJSON(jsonfn, flatten = TRUE)\n# metadf &lt;- tibble::as_tibble(jsondf) |&gt;\n#   dplyr::select(site = StationCode, name = PositionName, Area, lon = Longitude, lat = Latitude) |&gt;\n#   dplyr::mutate(lon = as.numeric(lon), lat = as.numeric(lat))\n# DBI::dbWriteTable(conn, \"metadf\", metadf, overwrite = TRUE, row.names = FALSE)\nairqualitydf &lt;- tibble::as_tibble(jsondf) |&gt;\n  dplyr::select(\n    datetime = TimePoint,\n    site = StationCode,\n    `CO_mg/m3` = CO,\n    `CO_24h_mg/m3` = CO_24h,\n    `NO2_μg/m3` = NO2,\n    `NO2_24h_μg/m3` = NO2_24h,\n    `O3_μg/m3` = O3,\n    `O3_24h_μg/m3` = O3_24h,\n    `O3_8h_μg/m3` = O3_8h,\n    `O3_8h_24h_μg/m3` = O3_8h_24h,\n    `PM10_μg/m3` = PM10,\n    `PM10_24h_μg/m3` = PM10_24h,\n    `PM2.5_μg/m3` = PM2_5,\n    `PM2.5_24h_μg/m3` = PM2_5_24h,\n    `SO2_μg/m3` = SO2,\n    `SO2_24h_μg/m3` = SO2_24h,\n    `NO_μg/m3` = NO,\n    `NO_24h_μg/m3` = NO_24h,\n    `NOx_μg/m3` = NOx,\n    `NOx_24h_μg/m3` = NOx_24h,\n    AQI,\n    COLevel,\n    NO2Level,\n    O3Level,\n    O3_8hLevel,\n    PM10Level,\n    PM2_5Level,\n    SO2Level,\n    PrimaryPollutant,\n    Quality,\n    Unheathful\n  ) |&gt;\n  dplyr::mutate(dplyr::across(\n    `CO_mg/m3`:AQI,\n    ~ round(readr::parse_number(.x), 4)\n  )) |&gt;\n  dplyr::mutate(datetime = lubridate::as_datetime(datetime))\nconn &lt;- cctdb::get_dbconn(\"nationalairquality\", writepermission = TRUE)\nDBI::dbWriteTable(\n  conn,\n  \"airqualitydf\",\n  airqualitydf,\n  append = TRUE,\n  row.names = FALSE\n)\nDBI::dbDisconnect(conn)"
  },
  {
    "objectID": "SD/5.3_大数据分析工具/index.html#欢迎讨论",
    "href": "SD/5.3_大数据分析工具/index.html#欢迎讨论",
    "title": "大数据分析工具",
    "section": "欢迎讨论！",
    "text": "欢迎讨论！\n  苏命|https://drwater.net;   https://drwater.net/team/ming-su/;   Slides\n\n\n  mingsu@rcees.ac.cn;"
  }
]