【问题标题】:Inline text- selecting variables from a table内联文本 - 从表中选择变量
【发布时间】:2018-04-12 14:45:22
【问题描述】:

我有一张如下表:

table <- data.frame(number = 1:4, 
                    percentage2 = c(16, 79, 3, 3))

在 R Markdown 中,我想显示以下输出文本:

At number 1 10% achieved

为此,我通常会像这样修改表格:

table %>%
filter (number==1) -> tab 

然后我会写到 RMarkdown:

At number 1 `r (tab$percentage2)`% achieved.

有没有一种方法可以在不应用过滤器创建“标签”的情况下获得相同的结果?我本以为这样的事情会奏效,但它没有。

At number 1 `r (tab$percentage2, number==1)`% achieved.

这是我一直在做的一个非常简单的示例,因此如果有一种方法无需使用过滤器创建新表,这将为我节省大量时间。

【问题讨论】:

  • 我已重新格式化您的问题以删除数据图片。这是不好的做法,是吸引反对票的好方法。请参阅有关如何使用 R 代码轻松重新创建数据的编辑。
  • 好的,请注意。谢谢

标签: r r-markdown kable


【解决方案1】:

我看不出这将如何节省时间,但您可以避免使用

创建新表
with(table, percentage2[which(number == 1)])

【讨论】:

  • 我明白你的意思。有没有办法使用r (table$percentage)而不是在代码块中将其写入文本?否则我需要将其写在块中,然后再写在文本中,正如您所建议的那样,这并不会真正节省太多时间
  • 你可以把我的表达放在文本中,不需要放在代码块中。它只是一个计算结果为您想要的值的表达式。只需使用table 而不是tab。我现在已经编辑了答案。
  • 所以在文本中它会显示为 At number 1 r with(table, percentage2[which(number == 1)])% 已实现?我试过了,但它似乎不起作用
【解决方案2】:

创建一个函数来为您进行格式化似乎是最容易的。这是一个基本布局,您可以针对其他场景进行自定义:

displayresults <- function(df, num){
  paste0("Number ", number, " ", 
        with(table, percentage2[which(number == num)]),
        "% achieved")
}

然后通过使用:

`r displayresults(table, 1)`

会输出

Number 1 16% achieved

一个完整的例子:

---
output: pdf_document
---

```{r}
table <- data.frame(number = 1:4, 
                    percentage2 = c(16, 79, 3, 3))


displayresults <- function(df, number){
  paste0("Number ", number, " ", 
        with(table, percentage2[which(number == 1)]),
        "% achieved")
}
```

`r displayresults(table, 1)`

【讨论】:

  • 您在该函数中使用了两次number:一次作为参数,一次作为列名,然后忽略该参数。您可以将 arg 名称更改为 num,并将 with() 语句更改为 with(table, percentage2[which(number == num)]),这样就可以了。不知道会不会在真实文档中多次使用;如果没有,我可能不会为它创建一个函数。
  • @user2554330 我的错,谢谢提醒。我建议一个函数的原因是问题表明“这是我一直在做的事情的一个非常简单的例子”,所以尽管它可能为提问者提供了一种他们可以更普遍应用的技术。
猜你喜欢
  • 2013-07-26
  • 2018-12-26
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
相关资源
最近更新 更多