嗨,我正在尝试flextable在 Rmarkdown .doc 文档中使用来格式化我的表格。我喜欢flextable提供(但对其他类似包开放)的简单格式选项,但发现我认为应该是基本功能的东西并不总是有效。
我想让表格适合 word 文档的宽度,以便如果需要的文本将在一列内换行以适应,但如果页面上有可用空间,列将变宽,但不会达到该列的程度太宽以至于没有显示所有数据。
我在下面做了一个例子来说明我的问题。默认情况下,所有列都具有相同的宽度,并且文本会被换行以适应,但因此会浪费空间。我想将列拟合到数据中(使用autofit),但这会使列如此宽以至于它们从屏幕上消失。我希望使用mpg,vs和carb更广泛的快乐媒体,但仍在发生一些文本换行。例如我想要这个:
显然我可以手动更改宽度,flextable::width但我的表格是通过自动化过程制作的,所以我不知道我希望每列有多宽。
这是我的示例,它显示了 with 或 eithout 的问题 autofit
---
title: "TestTable"
output: word_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
suppressWarnings(suppressPackageStartupMessages({library(knitr)
library(pander)
library(flextable)
library(tidyverse)
library(flextable)}))
```
## Normal Table
Without extra formatting, wraps text so that it fits on the page, but there is no need for column widths to be equal and could be wider on the page …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该程序包flextable在Rmarkdown中获取一些格式正确的表(转到Word文件)。这些表通常工作正常,但是如果我将其放在if语句中,则如果if语句中还有其他内容在打印,则看不到该表。有什么想法吗?
我的例子(一起运行):
---
title: "Testing"
output:
word_document:
reference_docx: styles.docx
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## R Markdown
```{r defaults}
library(pander)
library(knitr)
library(flextable)
```
Run Code Online (Sandbox Code Playgroud)
第一个测试工作正常-否if语句和表两边的新行
## test 1 table no if statemnets
```{r test1, echo = FALSE, results = 'asis'}
test <- data.frame (c = 1:5, x = 6:10)
testft <- flextable(test)
testft
```
Run Code Online (Sandbox Code Playgroud)
第二个测试有一个if语句,没有其他文本,可以正常工作
## test 2 if statement no other text
```{r test2, echo = FALSE, results = 'asis'}
RunTable <- TRUE
if(RunTable){
testft …Run Code Online (Sandbox Code Playgroud) 我有一个关于通过 R 中的嵌套函数传递默认参数的一般性问题。我的示例(显然)是对我实际想要做的事情的极大简化,但我在其他时候遇到过这个问题,所以我正在寻找一个通用的解决方案.
基本上我有三个函数,并且希望某些元素在所有三个函数中都有一个默认值。这些函数在彼此内部调用,但有时单独foo1调用(即调用foo2和foo2调用foo3,但有时我只调用foo3或foo2)。
编辑以澄清:我正在寻找一种方法来wd从被调用的函数级别传递(在我的实际问题中)一些其他变量,而不必在每个函数调用中将它们写出来。那就是我想wd在所有级别设置默认值。为了避免将它们命名为所有不同的东西,如果您想单独调用我wd = wd在每个函数调用中尝试使用的函数(旨在wd从它正在调用的函数中访问它),这会造成混淆。这给了promise already under evaluation: recursive default argument reference or earlier problems?. 有没有更好的方法来传递参数通过以便在另一个函数中调用时它传递参数?
我的第一个示例作品显示了工作代码,但是每次我调用其他函数时,我都必须指定它wd = wd,当它是多个参数时,我多次/在其中调用函数ddply使脚本使用起来很麻烦.
第二个例子是我所希望的,wd默认情况下wd在它被调用的环境中设置为where ,但这显然不允许发生错误。传递参数而不必不断分配参数的最佳方法是什么?
编辑:我已经查看了promise 已经在评估中的答案:递归默认参数引用或早期问题?并且我知道这是一种可能的解决方法(它是我目前运行脚本的方式),但我真的希望每个函数的参数都具有相同的名称,以便在单独调用它们时既快速又简单记住参数名称。
示例 1:工作正常,但没有设置默认值。
foo1 <- function(x, wd, reps){
filename = paste0("Event", x)
myString <- foo2(file = filename, wd = wd)
rep(myString, reps) …Run Code Online (Sandbox Code Playgroud) 嗨,我想知道是否有一种方法可以使RStudio的默认新R脚本具有标头?即更改按ctrl + shift + n时打开的脚本,以包含文本而无需任何其他用户输入。
例如:
## Project:
## Purpose:
## Created By:
## Created Date:
Run Code Online (Sandbox Code Playgroud)
我知道我可以添加一个具有类似于此问题所示设置的代码段在R中创建默认注释标题模板?但是我希望有一种方法可以使RStudio中的所有新脚本默认打开,类似于Spyder默认在每个新脚本顶部都带有“ Created on ... Author ...”的方式。
这个想法是在提醒我自己和组织中的其他人,我们在脚本中需要标头。包含摘要可简化操作,但不能提醒您。
谢谢
嗨,我想在R中做些看起来应该很简单的事情,但是我似乎在脑力衰退。
对于data.frame中的每一行,我想获取Vol上面in行中的值,In为该行添加value,然后减去一个依赖于该值的值。
这是我的尝试,但是滞后只是在开始时向后看一排值,一旦计算出下一个值,就不会继续往后看
library(dplyr)
df <- data.frame(In = c(1,4,0,0,1,2,3,0,0), Vol = c(1,rep(NA,8)))
df %>% mutate(Vol = (lag(Vol) + In) - (lag(Vol) + In)*0.01)
Run Code Online (Sandbox Code Playgroud)
期望的输出=
In Vol
1 1 1.00
2 4 4.95
3 0 4.90
4 0 4.85
5 1 5.79
6 2 7.72
7 3 10.61
8 0 10.50
9 0 10.40
Run Code Online (Sandbox Code Playgroud) 我想设置 ggplot 的最大 y 值,同时保留默认的最小 y 值,但我需要使用,coord_cartesian因为我想放大,而不是从计算中排除任何数据。
我很惊讶我找不到这个问题的答案。有很多问题回答如何将限制扩展到某一特定值或仅使用设置一个限制scale_._..,但我找不到任何使用coord_cartesian来仅设置一个限制
例如; 使用以下示例图?coord_cartesian:
library(ggplot2)
p <- ggplot(mtcars, aes(disp, wt)) +
geom_point() +
geom_smooth()
Run Code Online (Sandbox Code Playgroud)
我想要相当于
p + coord_cartesian(ylim = c(1.5, 4))
Run Code Online (Sandbox Code Playgroud)
无需将 1.5 设置为最小值。
如果我可以使用scale_y_continuous我可以使用
p + scale_y_continuous(limits = c(NA, 4))
Run Code Online (Sandbox Code Playgroud)
但这将有助于平滑的所有数据限制为小于 4 的值,这是我不想要的,并且等效的p + coord_cartesian(ylim = c(NA, 4))返回错误。
有简单的替代方法吗?
我还可以根据绘图的最小值数据进行计算,但如果我对绘图或类似内容进行刻面,这可能会变得复杂。
嗨,我有一个带有不同数据列(例如x,y,z)的数据框,以及另一列指定要选择的数据框。我想使用dplyr :: mutate(或类似方法)来制作一个新列,该列的值对应于“选择”指定的列中的值。但是我想将所有列都放在首位。在我的真实数据中,我还有其他一些带有元数据的列。
示例数据:
library(dplyr)
testdf <- data.frame(x = 1:5, y = 11:15, z = 101:105, choose = c("z","y","x","y","z"))
Run Code Online (Sandbox Code Playgroud)
我可以在示例中使用来完成这项工作,case_when但是在我的实际脚本中会生成列名和select列,并且它们可能具有不同的值,所以我不想硬编码可能存在的名称。
所需的输出/测试
mutate(testdf, selectedValue = case_when(choose == "x" ~x,
choose == "y"~ y,
choose == "z"~ z, T~NA_integer_))
#> x y z choose selectedValue
#> 1 1 11 101 z 101
#> 2 2 12 102 y 12
#> 3 3 13 103 x 3
#> 4 4 14 104 y 14
#> 5 5 15 105 z 105 …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来强制 a 上的日期标签从ggplot(看似)逻辑时间开始。我已经多次遇到这个问题,但我当前的问题是我希望在“我01/01/yyyy
的数据是一个大型数据集”上进行中断,其中包含 POSIXct 日期列、要在“流量”列中绘制的数据以及“站点”列中的多个站点名称。
library(ggplot2)
library(scales)
ggplot(AllFlowData, aes(x=Date, y = Flow, colour = Site))+geom_line()+
scale_x_datetime(date_breaks = "1 year", expand =c(0,0),labels=date_format("%Y"))
Run Code Online (Sandbox Code Playgroud)
我可以强制每年都有休息时间,如果没有labels=date_format("%Y")(每年 01/01 开始),它们看起来还不错,但如果我包括labels=date_format("%Y")(因为有 10 年的数据,所以有点混乱),日期标签会移至 ~11 月,尽管我的数据从 01/01/1990 开始,但 1989 是第一个标签。
过去,我在不同的时间步长上多次遇到过这个问题,例如想要将其强制到该月的 1 号或每天的午夜而不是白天。有没有通用的方法来做到这一点?
我已经研究过在 ggplot2 (scale_x_date) 中创建特定的日期范围,但我不想对我的中断进行硬编码,因为我有相当多的图与不同的日期范围有关。
谢谢
我正在尝试修复图例,以便不存在由geom_vlinein引起的交叉ggplot。\n我知道我的示例作为情节没有多大意义,但只是想要一个快速可重现的示例。
library(ggplot2)\nggplot(diamonds)+\n geom_point(aes(x = carat, y = depth, colour = "depth"), pch = 4)+\n geom_line(aes(x = carat, y = table, colour = "table"))+\n geom_vline(aes(xintercept = 2, colour = "x = 2"))+\n guides(colour = guide_legend(override.aes = list(linetype=c(0,1,1), shape=c(4,NA,NA))))\nRun Code Online (Sandbox Code Playgroud)\n\n我知道我可以用来guide_legend(override.aes = \xe2\x80\xa6)解决每个图例项上都出现的点和线的问题,但这似乎无法删除由geom_vline()
我发现了几个正在寻找解决方案的问题(如下),但它们似乎都通过使用不同的 aes(使用填充的线型或颜色)分隔 vline 来解决它。有没有办法可以保留 aescolour但不让我的传奇看起来像这样?