我正在尝试设置一个在我的HTML报告中knitr::knit_hooks()自动格式化R-markdown块的数据框输出kableExtra.
我想不要在每个表格数据块的末尾重复添加以下行(或任何行):
head(iris) %>%
kable("html") %>%
kable_styling("hover", full_width = FALSE)
Run Code Online (Sandbox Code Playgroud)
我想出了一个基于这个答案的解决方案,它通过评估块源来实现(请参阅下面的答案,其中包括我对此方法的一些问题); 我希望使用块输出可能有更好的解决方案.
这是一个示例.Rmd,概述了我想要实现的目标.
---
title: "Untitled"
author: "Paul"
date: "25 September 2018"
output: html_document
---
```{r setup, include = F}
library(dplyr)
library(kableExtra)
library(knitr)
data(iris)
default_source_hook <- knit_hooks$get('source')
knit_hooks$set(
output = function(x, options) {
x %>%
kable("html") %>%
kable_styling("hover", full_width = FALSE)
},
source = function(x, options) {
if(is.null(options$table))
default_source_hook(x, options)
else {
eval(parse(text = x)) %>%
kable("html") %>% …Run Code Online (Sandbox Code Playgroud) 我在 d 列中有一个“第一”查找表。例如,患者第一次因某种特定疾病入院。我想在多个其他条件下通过 data.table 将其连接回主数据框架。
我的问题是,不幸的是,主 data.table 可能有多个具有相同连接标准的记录,导致连接后每个患者有多个“第一”。现实世界的数据是混乱的,朋友们!
是否可以仅对第一个匹配记录进行 {data.table} 连接?
这与这个问题类似,但多重匹配位于主数据表上。我认为mult只有当表上有多个条目被加入时才有效。
代表:
library(data.table)
set.seed(1724)
d1 <- data.table(a = c(1, 1, 1),
b = c(1, 1, 2),
c = sample(1:10, 3))
d2 <- data.table(a = 1, b = 1, d = TRUE)
d2[d1, on = c("a", "b")]
a b d c
1: 1 1 TRUE 4
2: 1 1 TRUE 8
3: 1 2 NA 2
Run Code Online (Sandbox Code Playgroud)
期望的输出
a b d c
1: 1 1 TRUE 4
2: …Run Code Online (Sandbox Code Playgroud) 我想使用pivot_longer()from {tidyr} withnames_pattern将数据转换为长格式,同时保留列名称中模式匹配之一的前缀字符串。
这似乎违反直觉,但我想在应用数据字典清理步骤之前转换为长格式,这需要原始列名。
library(dplyr)
library(tidyr)
d <- tibble(id = 1,
other_var = "foo",
suffix_t1_value1 = "a",
suffix_t1_value2 = "b",
suffix_t2_value1 = "c",
suffix_t2_value2 = "d")
Run Code Online (Sandbox Code Playgroud)
> pivot_longer(d,
starts_with("suffix"),
names_pattern = "suffix_t(1|2)_(.*)",
names_to = c("rep", ".value"))
# A tibble: 2 x 5
id other_var rep value1 value2
<dbl> <chr> <chr> <chr> <chr>
1 1 foo 1 a b
2 1 foo 2 c d
Run Code Online (Sandbox Code Playgroud)
# A tibble: 2 x 5
id …Run Code Online (Sandbox Code Playgroud) 将合并成几列后tidyr::unite(),来自缺失数据的NA仍保留在我的字符向量中,这是我不希望的。
我每行有一系列医疗诊断(每列1个),并希望通过基准测试一系列代码。 %in%和grepl()。
Github上有一个关于此问题的公开问题,是否有任何动静-或解决方法?我想让向量保持逗号分隔。
这是一个代表性的例子:
library(dplyr)
library(tidyr)
df <- data_frame(a = paste0("A.", rep(1, 3)), b = " ", c = c("C.1", "C.3", " "), d = "D.4", e = "E.5")
cols <- letters[2:4]
df[, cols] <- gsub(" ", NA_character_, as.matrix(df[, cols]))
tidyr::unite(df, new, cols, sep = ",")
Run Code Online (Sandbox Code Playgroud)
电流输出:
# # A tibble: 3 x 3
# a new e
# <chr> <chr> <chr>
# 1 A.1 NA,C.1,D.4 E.5
# 2 A.1 NA,C.3,D.4 E.5 …Run Code Online (Sandbox Code Playgroud) 我有一个包含 5 列的数据框。我知道如何计算由另一列分组的一列的平均值。但是,我需要将其按两列分组。例如,我想计算按第 1 列和第 2 列分组的第 5 列的平均值。
\n\ndf <- structure(list(Country = structure(c(1L, 1L, 1L, 1L, 1L, 1L, \n1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, \n3L, 3L, 3L), .Label = c("AT", "CH", "DE"), class = "factor"), \n Occupation = c(1L, 3L, 5L, 3L, 1L, 2L, 5L, 3L, 5L, 3L, 1L, \n 2L, 1L, 5L, 3L, 3L, 1L, 3L, 2L, 5L, 5L, 1L, 2L, 1L, 3L), \n Age = c(20L, …Run Code Online (Sandbox Code Playgroud)