table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}
61、创建以向量为输入并返回以下内容的函数:a. 偶数位置的元素;b. 除最后一个值之外的每个元素;c. 仅偶数(且无缺失值)。
以下是实现这些功能的 R 语言函数:
a. 获取偶数位置元素的函数:
even_positions <- function(x) {
x[seq(2, length(x), 2)]
}
b. 获取除最后一个值之外的每个元素的函数:
except_last <- function(x) {
x[-length(x)]
}
c. 获取仅偶数(且无缺失值)的函数:
even_values <- function(x) {
x[x %% 2 == 0 & !is.na(x)]
}
62、通过创建一份简短的简历来练习你所学的内容。标题应该是你的名字,并且你至少要包含教育或工作经历的标题。每个部分都应该包含一个带项目符号的工作/学位列表。用粗体突出显示年份。
张三
教育背景
2018 – 2022
[大学名称] [专业] [学位]
工作经历
2022 – 至今
[公司名称] [职位]
63、添加一个部分来探讨钻石大小如何随切工、颜色和净度变化。
钻石大小随切工、颜色和净度的变化分析
为了探讨钻石大小如何随切工、颜色和净度变化,我们可以按以下步骤进行分析和可视化。
首先加载必要的库和数据集:
library(tidyverse)
data(diamonds)
然后分析钻石大小(以克拉为单位)与切工、颜色和净度的关系。我们可以通过分组计算不同切工、颜色和净度组合下的平均克拉数。
size_by_cut_color_clarity <- diamonds %>%
group_by(cut, color, clarity) %>%
summarise(avg_carat = mean(carat), .groups = 'drop')
接着进行可视化,使用三维柱状图或者分面图来展示这种关系。以下是使用分面图的示例:
ggplot(size_by_cut_color_clarity, aes(x = color, y = avg_carat, fill = cut)) +
geom_col(position = 'dodge') +
facet_wrap(~clarity) +
labs(title = '钻石大小随切工、颜色和净度的变化',
x = '颜色',
y = '平均克拉数',
fill = '切工')
通过上述代码,我们可以直观地看到不同切工、颜色和净度组合下钻石大小的变化情况。
进一步分析的问题
哪种切工和颜色的组合通常对应较大的钻石?
净度对钻石大小有怎样的影响?是净度越高钻石越大,还是有其他规律?
是否存在某些特殊的切工 – 颜色 – 净度组合,其钻石大小明显偏离整体趋势?
通过对这些问题的探讨,我们可以更全面地了解钻石大小随切工、颜色和净度的变化规律。
64、在可视化编辑器中打开diamond – sizes.qmd文件,插入一个代码块,并使用knitr::kable()函数添加一个表格,展示diamonds数据框的前五行。
首先在可视化编辑器中打开
diamond-sizes.qmd
文件,然后插入一个代码块,在代码块中编写如下代码:
knitr::kable(diamonds[1:5, ])
65、建立一个代码块网络,其中代码块 d 依赖于代码块 c 和 b,并且代码块 b 和 c 都依赖于代码块 a。让每个代码块打印
lubridate::now()
,设置
cache: true
,然后验证你对缓存的理解。
lubridate::now()
cache: true
#| label: a
#| cache: true
print(lubridate::now())
#| label: b
#| cache: true
#| dependson: "a"
print(lubridate::now())
#| label: c
#| cache: true
#| dependson: "a"
print(lubridate::now())
#| label: d
#| cache: true
#| dependson: "b", "c"
print(lubridate::now())
运行上述代码并观察各代码块的输出时间,若依赖代码块未改变,再次运行时依赖它的代码块应使用缓存结果,输出时间不变。
66、企鹅数据框中的bill_depth_mm变量描述的是什么?
需阅读?penguins帮助文档获取该变量描述的具体内容。
67、绘制
bill_depth_mm
与
bill_length_mm
的散点图。即,将
bill_depth_mm
放在 y 轴,
bill_length_mm
放在 x 轴。描述这两个变量之间的关系。
bill_depth_mm
bill_length_mm
bill_depth_mm
bill_length_mm
通常可根据绘制出的散点图判断:
若散点大致呈从左下角到右上角分布,可能是正相关;
若散点大致呈从左上角到右下角分布,可能是负相关;
若散点分布无明显规律,则可能无明显线性关系。
68、geom_point() 函数中的 na.rm 参数有什么作用?该参数的默认值是什么?创建一个散点图,其中成功将此参数设置为 TRUE。
`na.rm` 参数用于决定是否移除缺失值;在许多 R 函数中其默认值为 `FALSE` 。创建设置该参数为 `TRUE` 的散点图示例代码如下:
```r
ggplot(data = penguins, mapping = aes(x = flipper_length_mm, y = body_mass_g)) +
geom_point(na.rm = TRUE)
##69、以下两个代码绘制的条形图有什么不同?对于改变条形图的颜色,哪个美学属性(color 或 fill)更有用?代码如下:ggplot(penguins, aes(x = species)) + geom_bar(color = "red") ;ggplot(penguins, aes(x = species)) + geom_bar(fill = "red")
在这两个代码中,`ggplot(penguins, aes(x = species)) + geom_bar(color = "red")` 绘制的条形图,`color` 属性设置的是条形边框的颜色,即条形的轮廓为红色,而条形内部是默认颜色;
`ggplot(penguins, aes(x = species)) + geom_bar(fill = "red")` 绘制的条形图,`fill` 属性设置的是条形内部的填充颜色,即条形内部为红色。
对于改变条形图颜色(通常指填充颜色),`fill` 更有用。
##70、对加载tidyverse包后可用的diamonds数据集中的carat变量制作直方图。尝试不同的binwidth值。哪个值能揭示最有趣的模式?
使用了 `0.5` 和 `0.01` 两个 `binwidth` 值,`0.01` 的 `binwidth` 揭示了更有趣的模式,如:
- 为什么整克拉和常见分数克拉处有更多钻石
- 以及为什么每个峰值右侧的钻石比左侧多
但实际中可能需更多尝试来确定最有趣模式对应的 `binwidth`,没有绝对标准值。
##71、在R语言中,使用ggplot2库对数据框penguins创建以下两个堆叠条形图。第一个图的代码是ggplot(penguins, aes(x = island, fill = species)) + geom_bar(position = "fill");第二个图的代码是ggplot(penguins, aes(x = species, fill = island)) + geom_bar(position = "fill")。请问第一个图能回答什么问题?第二个图能回答什么问题?
- 第一个图(x为island,fill为species)可用于比较不同岛屿上企鹅物种的分布比例;
- 第二个图(x为species,fill为island)可用于比较不同物种企鹅在各岛屿的分布比例。
##72、要将之前代码中的图形保存为 PDF 而非 PNG,需要做哪些更改?如何了解 ggsave() 支持保存哪些类型的图像文件?
可在 `ggsave()` 的文档中了解支持保存的图像文件类型。要将图形保存为 PDF 而非 PNG,在使用 `ggsave()` 函数时,将文件名的扩展名设置为 `.pdf` 即可,例如:
```r
ggsave("your_plot.pdf")
73、按下Option + Shift + K/Alt + Shift + K会发生什么?如何通过菜单到达相同的位置?
通常在软件中,按下特定快捷键可能会触发某些功能或打开特定窗口。要通过菜单到达相同位置,可在软件的菜单中寻找类似功能的选项,一般可在帮助菜单下找到相关的快速参考或快捷键帮助等内容。
74、在单个管道中,找出满足以下条件的所有航班:• 到达延误两小时或以上 • 飞往休斯顿(IAH 或 HOU) • 由联合航空、美国航空或达美航空运营 • 在夏季(7 月、8 月和 9 月)出发 • 到达延误超过两小时,但未晚点出发 • 延误至少一小时,但在飞行中追回了超过 30 分钟的时间
通常在 R 语言中可以使用
dplyr
包的函数,如
filter
等,结合逻辑条件来筛选满足这些条件的航班,示例代码框架可能如下:
flights |>
filter(
arr_delay >= 120,
dest %in% c('IAH', 'HOU'),
carrier %in% c('UA', 'AA', 'DL'),
month %in% c(7, 8, 9),
arr_delay > 120 & dep_delay <= 0,
dep_delay >= 60 & (dep_delay - arr_delay) > 30
)
其中
flights
为航班数据框,具体代码需根据实际数据结构调整。
75、对航班进行排序,找出出发延误时间最长的航班。找出清晨最早起飞的航班。
可通过以下代码实现:
对于找出出发延误时间最长的航班,可使用
flights |> arrange(desc(dep_delay))
;
对于找出清晨最早起飞航班,可使用
flights |> arrange(dep_time)
,
前提是
flights
为航班数据框,
dep_delay
为出发延误时间列,
dep_time
为出发时间列。
76、如果你同时使用filter()和arrange(),使用它们的顺序重要吗?为什么?从结果和函数所需的工作量来考虑。
顺序是重要的。先使用
filter()
过滤数据可以减少后续
arrange()
需要处理的数据量,提高效率,并且不同顺序可能导致结果不同,因为
filter()
会改变数据集合,
arrange()
是在当前数据集合上进行排序。
77、any_of()函数的作用是什么?为什么它与向量 variables <- c(“year”, “month”, “day”, “dep_delay”, “arr_delay”) 结合使用可能会有帮助?
any_of()
函数用于选择数据框中名称出现在给定字符向量中的变量。与该向量结合使用时,可方便地从数据框中选择包含在向量中的变量,避免手动逐个指定变量名。
78、哪家航空公司的平均延误情况最严重?挑战:能否区分是机场不佳还是航空公司不佳导致的影响?为什么能或不能?(提示:考虑 flights |> group_by(carrier, dest) |> summarize(n()) )
若要找出平均延误最严重的航空公司,可按航空公司分组计算平均延误:
按航空公司分组
,计算每个航空公司的平均延误时间。
对于区分机场和航空公司的影响,可采取以下步骤:
按
航空公司
和
目的地机场
分组;
统计每组的
航班数量
;
结合
机场
和
航空公司
相关的延误数据进行进一步分析。
79、找出从每个目的地出发时延误最严重的航班。
可按以下思路操作:使用分组函数按目的地分组,然后在每个组内找出出发延误时间最大的航班,以R语言为例,代码可能如下:
flights |>
group_by(dest) |>
filter(dep_delay == max(dep_delay, na.rm = TRUE))
80、访问RStudio提示的Twitter账号,找到一条看起来有趣的提示并进行实践!
你可以通过以下步骤完成:
打开Twitter
搜索RStudio Tips账号
浏览其中的提示
选择一条有趣的进行实践操作
81、RStudio诊断会报告哪些其他常见错误?
需阅读文章《code diagnostics》来了解
82、如果文件中的字段用 | 分隔,你会使用什么函数来读取该文件?
可使用read_delim()函数,指定分隔符为 | 来读取。
83、read_fwf()最重要的参数有哪些?
可通过fwf_widths()指定字段宽度,或通过fwf_positions()指定字段位置。
84、创建一个 hwy 与 displ 的散点图,其中的点为粉色实心三角形。
在 R 语言中使用
ggplot2
包可按如下代码实现:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point(shape = 17, fill = "pink", color = "pink")
其中,
shape = 17
代表三角形,
fill
和
color
都设为
"pink"
以实现粉色实心效果。
85、以下代码
ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(drv ~ .)
和
ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(. ~ cyl)
会生成什么图形,分别有什么作用?
ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(drv ~ .)
ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(. ~ cyl)
`facet_grid(drv ~ .)` 会按 `drv` 变量的不同水平将图形在垂直方向上分割成多个子图,每个子图展示不同 `drv` 水平下 `displ` 和 `hwy` 的关系;
`facet_grid(. ~ cyl)` 会按 `cyl` 变量的不同水平将图形在水平方向上分割成多个子图,每个子图展示不同 `cyl` 水平下 `displ` 和 `hwy` 的关系。
`.` 表示不进行该方向的分面。
86、以 ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 2) 为例,使用分面而非颜色美学有哪些优点?有哪些缺点?如果数据集更大,这种平衡会如何变化?
优点:
- 分面能清晰展示各子集分布和关系,避免颜色过多导致视觉混乱;
- 可独立观察各子集细节。
缺点:
- 占用空间大,子图过多会使单个子图变小难以看清;
- 难以整体把握数据全局特征。
若数据集更大:
- 分面优势更明显,能更好展示各子集特征;
- 但子图过多会让缺点更突出,如布局拥挤。
87、查看facet_wrap。nrow的作用是什么?ncol的作用是什么?还有哪些选项可以控制各个面板的布局?为什么facet_grid()没有nrow和ncol参数?
通常,
nrow
用于指定分面布局的行数,
ncol
用于指定列数。其他控制布局的选项可能包括
as.table
、
dir
等。
facet_grid()
没有
nrow
和
ncol
参数是因为它根据行和列变量的唯一组合来布局面板,而不是像
facet_wrap()
那样按指定的行列数排列。
88、使用facet_wrap()而不是facet_grid()重新创建绘图ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(drv ~ .) ,分面标签的位置会如何变化?
使用
facet_wrap()
时,分面标签通常会出现在每个分面的上方;而使用
facet_grid(drv ~ .)
时,分面标签会出现在每行分面的左侧。
所以从
facet_grid(drv ~ .)
切换到
facet_wrap()
,分面标签位置会从左侧移到上方。
89、geom_col() 有什么作用?它与 geom_bar() 有什么不同?
通常,
geom_bar()
默认使用
stat_count()
统计每个组的观测数量,而
geom_col()
用于绘制柱状图时,直接使用数据中的值作为柱子的高度,即
geom_col()
相当于
geom_bar(stat = "identity")
。
90、大多数几何对象(geoms)和统计变换(stats)是成对出现的,并且几乎总是一起使用。列出所有的成对组合。它们有什么共同之处?
未明确列出所有成对组合。它们的共同之处是:
每个
geom
都有默认的
stat
每个
stat
也有默认的
geom
通常使用
geoms
时无需担心底层的统计变换。
91、在R语言的ggplot2包中,代码 ggplot(mpg, aes(x = displ, y = hwy)) + geom_point() 与 ggplot(mpg, aes(x = displ, y = hwy)) + geom_point(position = “identity”) 所绘制的图之间是否有差异?如果有,差异是什么?为什么?
在
ggplot2
中,
geom_point()
默认的
position
就是
"identity"
,即直接绘制数据点,不进行位置调整,所以这两个图通常没有视觉上的差异。
92、geom_jitter() 函数中哪些参数可以控制抖动的程度?
通常在 R 语言的 ggplot2 包中,
geom_jitter()
函数里
width
和
height
参数可控制抖动程度,
width
控制水平方向抖动量,
height
控制垂直方向抖动量。
93、比较并对比 geom_jitter() 和 geom_count()。
geom_jitter()
用于为数据点添加随机抖动,可解决小尺度下数据点重叠问题,使数据分布更清晰,适用于连续与分类变量关系展示;
geom_count()
用于统计每个组合的观测数量,通过圆圈大小展示,适用于探索两个分类变量的协变关系。
94、geom_boxplot() 的默认位置调整是什么?创建一个 mpg 数据集的可视化来展示它。
`geom_boxplot()` 的默认位置调整是 `'dodge2'`,它用于处理分组变量,使得不同组别的箱线图能够并排显示。
以下给出了 `mpg` 数据集可视化示例:
```r
ggplot(mpg, aes(x = fct_reorder(class, hwy, median), y = hwy)) +
geom_boxplot()
若变量名长,可交换 x 和 y 轴映射:
ggplot(mpg, aes(x = hwy, y = fct_reorder(class, hwy, median))) +
geom_boxplot()
95、下面的绘图代码 ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) + geom_point() + geom_abline() + coord_fixed() 能告诉我们城市道路和高速公路每加仑英里数(mpg)之间的什么关系?为什么 coord_fixed() 很重要?geom_abline() 的作用是什么?
该绘图通过散点展示城市和高速公路 mpg 关系;
coord_fixed()
保证 x 和 y 轴单位长度比例固定,使图形形状正确;
geom_abline()
添加一条参考线。
96、探索钻石数据集中x、y和z变量的分布。你有什么发现?思考一下钻石的情况,你会如何确定哪个维度是长度、宽度和深度。
y变量中值为0是不正确的,可能是缺失数据被编码为0,32mm和59mm的测量值可能不合理。对于确定钻石维度,一般较长的边可视为
长度
,与之垂直较短的边视为
宽度
,垂直于长和宽平面的为
深度
,但具体需结合钻石形状判断。
97、探索价格的分布。你是否发现了任何不寻常或令人惊讶的事情?(提示:仔细考虑组距,并确保尝试多种不同的值。)
可在分析时通过不同组距绘制价格分布直方图等可视化图表来探索
关注是否存在价格集中区域、异常峰值、空缺区间等不寻常情况
98、在直方图上放大时,比较并对比 coord_cartesian() 和 xlim() 或 ylim()。如果不设置 binwidth 会怎样?如果尝试缩放至只显示半个条形图会怎样?
在直方图上放大时,
coord_cartesian()
用于缩放坐标轴,它不会丢弃超出限制范围的数据,只是改变显示范围;而
xlim()
和
ylim()
函数会丢弃超出限制范围的数据。
通常不设置
binwidth
时会使用默认值,缩放至只显示半个条形图可能会影响对数据分布的判断。
99、在mean()和sum()函数中,na.rm = TRUE的作用是什么?
在
mean()
和
sum()
函数中,
na.rm = TRUE
表示在计算均值或总和时忽略缺失值(
NA
)。
100、使用燃油经济性数据重新创建一个图表,要求点的颜色和形状会根据传动系统类型而变化。
下面是给定的【文本内容】::需使用相关数据和绘图代码来实现。可使用 `ggplot` 函数结合 `aes` 设置不同传动系统类型对应的颜色和形状映射,再添加相应的几何图形层。
示例:
```r
ggplot(mpg, aes(x = displ, y = hwy, color = drv, shape = drv)) + geom_point()
说明:
mpg
为燃油经济性数据框;
displ
和
hwy
为变量;
drv
为传动系统类型变量,可根据实际情况调整。
“`
101、使用
geom_text()
添加的标签与分面如何相互作用?如何向单个分面添加标签?如何在每个分面中放置不同的标签?(提示:思考传递给
geom_text()
的数据集。)
geom_text()
geom_text()
可通过向
geom_text()
传递合适的数据集来实现。若要向单个分面添加标签,可筛选出该分面对应的数据并传递给
geom_text()
;若要在每个分面放置不同标签,可在数据集中为每个分面设置不同的标签值再传递给
geom_text()
。
102、为什么下面的代码没有覆盖默认比例尺?代码为:df <- tibble( x = rnorm(10000), y = rnorm(10000)) ggplot(df, aes(x, y)) + geom_hex() + scale_color_gradient(low = “white”, high = “red”) + coord_fixed()
此代码未覆盖默认比例尺可能是因为
geom_hex()
使用的是
fill
美学,而
scale_color_gradient()
是用于
color
美学的,应使用
scale_fill_gradient()
来覆盖
fill
美学的默认比例尺。