我正在使用Rstudio笔记本。 我已经创建了一个dplyr summary输出,现在我想将其转换为更具可读性的输出:
df %>%
group_by(y) %>%
dplyr::summarise_all(funs(count = n(),
mean = mean,
stdev = sd,
min = min,
max = max,
median = median,
iqr = IQR,
q25 = quantile(., probs = 0.25),
q75 = quantile(., probs = 0.75)
))
明智的输出是这样的:
y x1_count x2_count x3_count x1_mean x2_mean x3_mean
0 380081 380081 380081 10 12 36
1 19906 19906 19906 5 8 93
我的问题是:如何将其转换为:
count mean
y = 0 y = 1 y = 0 y = 1
x1 380081 19906 10 5
x2 380081 19906 12 8
x3 380081 19906 36 93
我尝试移调,但根本没有得到想要的结果。
答案 0 :(得分:1)
这里是一个选择:
df = read.table(text = "
y x1_count x2_count x3_count x1_mean x2_mean x3_mean
0 380081 380081 380081 10 12 36
1 19906 19906 19906 5 8 93
", header=T)
library(tidyverse)
df %>%
gather(col,value,-y) %>%
separate(col, c("x","metric")) %>%
mutate(metric = paste0(metric, " for y = ", y)) %>%
select(-y) %>%
spread(metric, value)
# x count for y = 0 count for y = 1 mean for y = 0 mean for y = 1
# 1 x1 380081 19906 10 5
# 2 x2 380081 19906 12 8
# 3 x3 380081 19906 36 93
答案 1 :(得分:1)
就像我在评论中指出的那样,这实际上是一个由两部分组成的问题:一个是关于重塑数据,但关键是要使用PDF输出的标题进行格式化。您正在寻找的输出不是您通常在R中所能达到的—您正在尝试获取重复的列名,然后在它们上方进行标题。因此,这是RMarkdown特有的问题,因为您试图以这种非标准格式编织成PDF。
第一部分是重塑。您可以通过以下方式实现此目的:将数据变成长形,然后用security.protocol=SSL
将x1_count
等分成x1
和count
。然后,您可以使用separate
和y = 0
,mutate
来标记paste
,将这些值放在一起,以得到unite
这样的列名,然后将其回到下面看到的宽格式。
count_y = 0
第二部分正在准备编织。有几种软件包可以让您创建这类打印表-我对library(tidyverse)
df %>%
gather(key = x_measure, value = val, -y) %>%
separate(x_measure, into = c("x", "measure"), sep = "_") %>%
mutate(y = paste("y =", y)) %>%
unite(key, measure, y) %>%
spread(key = key, value = val)
#> # A tibble: 3 x 5
#> x `count_y = 0` `count_y = 1` `mean_y = 0` `mean_y = 1`
#> <chr> <int> <int> <int> <int>
#> 1 x1 380081 19906 10 5
#> 2 x2 380081 19906 12 8
#> 3 x3 380081 19906 36 93
最熟悉,但是还有huxtable
,xtable
以及其他一些软件包。这是RMarkdown的一个片段,我将用它来与kableExtra
一起使用。
我正在使用kableExtra
和rename_all
来摆脱str_remove
中类似count_
的位。为了重塑,我仍然需要一种方法来保持列名的唯一性,但是现在我可以删除名称的那些部分。
然后使用count_y = 0
和kableExtra::kable_styling
进行第二级标题打印。我建议您仔细阅读vignettes,因为它们非常详尽。
kableExtra::add_header_above
编织后可得到带有以下内容的PDF: