https://github.com/rstudio/cheatsheets/raw/master/rmarkdown-2.0.pdf
上面的备忘单列出了以下语法,以在R Markdown中生成项目符号列表.*是主要的固体子弹.+是一个二级空心子弹.并且-是一个三级实心广场.
* unordered list
+ sub-item 1
+ sub-item 2
- sub-sub-item 1
用knitr渲染输出后,我没有得到预期的输出.我得到了下面显示的内容.第二行和第三行不缩进.只有最后一行是缩进的,只有一个缩进而不是预期的两个.和所有的子弹是次要空心风格.这就好像我将以下语法放入R Studio,但我没有.
+ unordered list
+ sub-item 1
+ sub-item 2
+ sub-sub-item 1
我如何得到我的意图,第一块粘贴语法?
我在Tidyverse中相当熟练,但总是使用ifelse()而不是dplyr if_else().我想切换此行为,并默认为始终使用dplyr::if_else()和弃用ifelse()我的代码.
有什么理由不这样做吗?这可能会让我陷入困境吗?我会饶有你的细节,但最近,if_else()当我在数据分析中不知不觉地创建了一列字符矩阵时,并没有使用我.如果我切换到总是使用if_else()我希望将来避免这个问题.
当我第一次开始在RI中编程时,通常会使用dplyr count().
library(tidyverse)
mtcars %>% count(cyl)
Run Code Online (Sandbox Code Playgroud)
一旦我开始使用apply函数,我开始遇到count()的问题.如果我简单地将ungroup()添加到我的计数结束(),那么问题就会消失.
我没有任何特别的可复制品来展示.但有人可以解释问题可能是什么,为什么ungroup()总是修复它,并且在每次count()之后或者在任何group_by()之后一直使用ungroup()有任何缺点吗?当然,我假设我不再需要在计算或汇总后对数据进行分组.
mtcars %>% count(cyl) %>% ungroup()
Run Code Online (Sandbox Code Playgroud) 一串长dplyr管道的末端是
mutate(n = if_else(FiscalYear == "FY2018" & Candy == "SNICKERS", n - 3, n))
这给出了这个错误
Error in mutate_impl(.data, dots) : Evaluation error: `false` must be type double, not integer.
Run Code Online (Sandbox Code Playgroud)
如果我改为这两个中的任何一个,那就会消失
mutate(n = ifelse(FiscalYear == "FY2018" & Candy == "SNICKERS", n - 3, n))
mutate(n = if_else(FiscalYear == "FY2018" & Candy == "SNICKERS", n - 3L, n))
我认为做一个简单的可重复娱乐是最简单的,所以我做了你在下面看到的,但我不能再得到错误了.知道发生了什么事吗?为什么不在ifelse哪里工作,如果我改变3到3L if_else,为什么if_else工作?我理解L 强制 3是一个整数,这是正确的吗?
library(tidyverse)
df <- tribble(
~name, ~fruit, ~qty,
"Bob", "apple", 10,
"Bill", "apple", …Run Code Online (Sandbox Code Playgroud) 在LaTeX中,我可以通过以下方式创建条件
\iftoggle{ebook}{
\newcommand{\textbreak}{\newline\hrule\newline}
}{
\newcommand{\textbreak}{\begin{center}\LARGE{$\Psi\quad\Psi\quad\Psi$}\end{center}}
}
Run Code Online (Sandbox Code Playgroud)
我可以在编织R Markdown时执行相同的操作,具体取决于输出是HTML还是PDF.
library(tidyverse)
ggplot(mpg, aes(hwy)) +
geom_histogram() +
theme_classic() +
NULL
Run Code Online (Sandbox Code Playgroud)
你还记得结束你的ggplot命令的酷炫技巧NULL,以便在代码中轻松注释/取消注释行吗?将上面的块与下面的块进行比较.在这个例子中,我将注释掉theme_classic() +,我的代码仍然正常,因为NULL最后.
ggplot(mpg, aes(hwy)) +
geom_histogram() +
# theme_classic() +
NULL
Run Code Online (Sandbox Code Playgroud)
好.那么如何使用dplyr管道做同样的事情呢?我想把它放在NULL最后,这样我就可以随意评论/取消注释count(cyl).但它不太有效.我得到了Error in .() : could not find function ".".
mtcars %>%
as_tibble() %>%
count(cyl) %>%
NULL
mtcars %>%
as_tibble() %>%
# count(cyl) %>%
NULL
Run Code Online (Sandbox Code Playgroud) 我的例子取自这里(链接)。R 版本是 3.4.3,ggplot2 版本是 2.2.1
library(tidyverse)
df <- data.frame(dose=c("D0.5", "D1", "D2"),
len=c(4.2, 10, 29.5))
ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity")
Run Code Online (Sandbox Code Playgroud)
几乎每个 ggplot2 教程都展示了一些简单的图表。我总是注意到主要网格线的厚度大约是次要网格线的两倍,这正是我所期望的。这显示在下面的第一张图片中。看起来不错。
每当我在 ggplot 上绘制某些内容时,默认情况下,次要网格线和主要网格线共享相同的权重、相同的厚度。为什么?我没有更改任何网格线设置?是否有一些我不小心启用/禁用的 R Studio 全局设置?我希望次要网格线比主要网格线更轻,就像显示的第一张图片一样。第二张图片是我在 ggplot 图表时得到的。
如何增加蓝色边框线的粗细?stroke在下面的示例中,该参数被忽略。
library(tidyverse)
ggplot(mpg, aes(cty, hwy)) +
geom_col(color = "blue", stroke = 2)
Run Code Online (Sandbox Code Playgroud) 此@camille代码使用ggplot生成一个不错的pareto图。
library(tidyverse)
d <- tribble(
~ category, ~defect,
"price", 80,
"schedule", 27,
"supplier", 66,
"contact", 94,
"item", 33
) %>% arrange(desc(defect)) %>%
mutate(
cumsum = cumsum(defect),
freq = round(defect / sum(defect), 3),
cum_freq = cumsum(freq)
) %>%
mutate(category = as.factor(category) %>% fct_reorder(defect))
brks <- unique(d$cumsum)
ggplot(d, aes(x = fct_rev(category))) +
geom_col(aes(y = defect)) +
geom_point(aes(y = cumsum)) +
geom_line(aes(y = cumsum, group = 1)) +
scale_y_continuous(sec.axis = sec_axis(~. / max(d$cumsum), labels = scales::percent), breaks = brks)
Run Code Online (Sandbox Code Playgroud)
几乎是完美的,只是我希望看到第二个y轴在y值累积处折断。这可以在base-R中使用以下代码来实现。但是如何在ggplot中完成呢?
## Creating the …Run Code Online (Sandbox Code Playgroud) library(tidyverse)
ggplot(mpg, aes(displ, cty)) +
geom_point() +
facet_grid(rows = vars(drv), scales = "free")
Run Code Online (Sandbox Code Playgroud)

上面的代码ggplot包括三个板4,f和r。我希望每个面板的y轴限制如下:
Panel y-min y-max breaks
----- ----- ----- ------
4 5 25 5
f 0 40 10
r 10 20 2
Run Code Online (Sandbox Code Playgroud)
如何修改我的代码来完成此任务?不知道是否scale_y_continuous更有意义,或coord_cartesian,或两者的某种组合。