小编Pau*_*aul的帖子

使用R-markdown knitr钩子在HTML报告中自定义格式表

我正在尝试设置一个在我的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)

hook r knitr r-markdown

7
推荐指数
1
解决办法
325
查看次数

如何将数据仅连接到 R 中带有 {data.table} 的第一个匹配行

我在 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)

join r data.table

5
推荐指数
1
解决办法
659
查看次数

使用“pivot_longer()”和“names_pattern”时如何将后缀附加到“.value”

我想使用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)

r tidyr

5
推荐指数
1
解决办法
584
查看次数

如何使用tidyr :: unite函数删除NA?

将合并成几列后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)

r tidyr

4
推荐指数
2
解决办法
2558
查看次数

计算按其他两列的值分组的列的平均值

我有一个包含 5 列的数据框。我知道如何计算由另一列分组的一列的平均值。但是,我需要将其按两列分组。例如,我想计算按第 1 列和第 2 列分组的第 5 列的平均值。

\n\n
df <- 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)

group-by r

0
推荐指数
1
解决办法
4900
查看次数

标签 统计

r ×5

tidyr ×2

data.table ×1

group-by ×1

hook ×1

join ×1

knitr ×1

r-markdown ×1