我正在使用 xaringan 创建一个 html 演示文稿,其中包括使用 kable() 生成的一些表格。不幸的是,这些表非常窄,所以我想在 kable_styling 中使用 full_width 选项。此外,我想关掉条纹设计。一个例子:
library(kableExtra)
head(iris) %>%
knitr::kable('html') %>%
kableExtra::kable_styling(full_width = TRUE, bootstrap_options = "basic")
Run Code Online (Sandbox Code Playgroud)
但是,xaringan 似乎忽略了 kable_styling() 选项。是否有可能实现这些目标,或者在使用 xaringan 时修改 kable 表的样式?
plyr::mapvalues 可以根据字典重新编码向量,即现有值和替换值的两个匹配向量。
library(plyr)
data <- c("a", "b", "c", "a")
dict_old <- c("a", "b", "c")
dict_new <- c("Apple", "Banana", "Carrot")
mapvalues(data, dict_old, dict_new)
[1] "Apple" "Banana" "Carrot" "Apple"
Run Code Online (Sandbox Code Playgroud)
在 dplyr 中,可以通过创建包含新值的列表并将旧值作为名称分配给列表元素来获得等效结果:
list <- as.list(dict_new)
names(list) <- dict_old
recode(data, !!!list)
[1] "Apple" "Banana" "Carrot" "Apple"
Run Code Online (Sandbox Code Playgroud)
然而,这让我觉得相当笨拙。在 tidyverse 中是否有更清洁的方法来做到这一点?
我试图使用grid.arrange绘制彼此相邻的多个图形.具体来说,我希望这些图有一个共享的x轴标签和底部的图例.这是我用于排列的代码(这里的工作示例),没有通用x轴:
plot.c <- grid.arrange(arrangeGrob(plot.3 +
theme(legend.position="none"),
plot.2 + theme(legend.position="none"),
plot.4 + theme(legend.position="none"),
nrow=1),
my.legend,
main="Title goes here",
left=textGrob("Y Axis", rot = 90, vjust = 1),
nrow=2,heights=c(10, 1))
Run Code Online (Sandbox Code Playgroud)
图例是TableGrob对象; 通用x轴应该是一个textGrob沿线
bottom=textGrob("X Axis")
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其添加到代码中,则图例将移动到右侧.如果我指示图例和标签都位于底部,则其中一个仍然移动到右侧.因此,问题是,是否有一种方法可以将通用x轴标签与底部的图例相结合?
我正在尝试创建一个图网格,它应该有一个围绕它们的框,一个类似棋盘的标签(即顶部/底部的字母,侧面的数字),以及一条分隔两半网格的垂直线.
我希望使用分面完成它(或足够类似的事情),但是当给定大量图时,facet_grid 不会创建横向标签(如这里),它出现:
testdata <- cbind("ID"=c(rep(1:24, each=10)),
"TT"=c(rep(0:1, each=5)),
"RD"=c(seq(1:5)),
"DV"=rnorm(240, 10, 5))
testdata <- data.frame(testdata)
testplot <- ggplot(data=testdata, aes(x=RD, y=DV)) +
geom_line(colour="black") + geom_point() +
facet_wrap(TT ~ ID, ncol=4)
Run Code Online (Sandbox Code Playgroud)

(facet_wrap 的另一个问题是它不能很好地处理我更喜欢的 ID ~ TT 排序,将这些值显示为 [1,0]、[1,1]、[2,0]、[2,1 ] 然后;而不是更可取的 [1,0], [2,0], [3,0], [1,1], [2,1] ......但这可以解决。)
我考虑过的另一个选择是使用box();但是,这仅适用于单个图(使用 grid.arrange/arrangeGrob 创建对象不起作用)。
最终,我想要一个大致如下的情节。我很高兴有任何建议!

我想从数据框中的多个列中计算汇总变量。键入所有行名时这是可能的,但是我想使用starts_with()和类似的函数。即
df <- data.frame(A1 = rnorm(100, 0, 1),
A2 = rnorm(100, 0, 1),
A3 = rnorm(100, 0, 1),
B1 = rnorm(100, 0, 1),
B2 = rnorm(100, 0, 1))
Run Code Online (Sandbox Code Playgroud)
什么有效:
library(tidyverse)
df %>% mutate(A = (A1 + A2 + A3)/3)
df %>% mutate(A = rowMeans(select(., A1:A3)))
Run Code Online (Sandbox Code Playgroud)
但是,前者在汇总许多变量时会很烦人,而后者在汇总许多行时会很快变得非常慢。我怀疑必须有一个更快的解决方案。
什么不起作用:
df %>% mutate(A = mean(A1:A3))
df %>% group_by(row_number()) %>% mutate(A = mean(A1:A3))
df %>% group_by(row_number()) %>% mutate(A = mean(starts_with("A")))
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:是否有一种方法可以在mutate()中使用mean()等来计算行均值,理想情况下不必拼出每个变量?
我有一个情节,其中我显示来自多个科目的个别值,按组着色.除此之外,还有使用stat_summary计算的每组均值.
我希望这两种方法可以按组进行着色,但是使用的颜色不同于单个数据.事实证明这很困难,至少在使用stat_summary时.我有以下代码:
ggplot(data=dat,
aes(x=Round, y=DV, group=Subject, colour=T1)) +
geom_line() + geom_point() + theme_bw() +
stat_summary(fun.y=mean, geom="line", size=1.5,
linetype="dotted", color="black",
aes(group=T1))
Run Code Online (Sandbox Code Playgroud)
这产生了这个示例图.
stat_summary创建的均值的颜色设置为黑色; 否则它会像个别数据线一样呈红色和蓝色.但是,无法设置多种颜色 - 因此color = c("black","blue")不起作用.
我已经尝试过scale_colour_manual作为解释这里,但是这将改变个人数据线的颜色,使平均线未受影响.
有什么建议如何解决这个问题?代码和数据在这里.
我有一个命名字符向量,我想按名称对其进行排序。微量元素:
# Character vector; assign names
vec <- letters[1:10]
names(vec) <- c(letters[20:11])
> vec
t s r q p o n m l k
"a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
# This does not work
> sort(vec)
t s r q p o n m l k
"a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
# Desired output
> vec
k l m n o p q r s t
"j" "i" "h" "g" …Run Code Online (Sandbox Code Playgroud) r ×6
ggplot2 ×3
plot ×3
colors ×1
dictionary ×1
dplyr ×1
facet ×1
facet-wrap ×1
gridextra ×1
grob ×1
kable ×1
kableextra ×1
r-markdown ×1
row ×1
sorting ×1
tidyverse ×1
xaringan ×1