【问题标题】:R: Filtering rows by “contains” text within row namesR:通过“包含”行名称中的文本过滤行
【发布时间】:2021-01-23 20:50:38
【问题描述】:

我正在使用 R 中的 mtcars 数据集。我的任务是使用 knitr::kable() 打印与本田和丰田卡对应的行。我被定向到此寻求帮助:https://r4ds.had.co.nz/r-markdown.html#table

但是,该部分只讨论了打印数据集的前 5 行,根本没有讨论过滤它。我点击阅读有关该功能的更多信息,但这对我来说完全陌生。

我能说的最好的就是汽车的品牌和型号是行名。所以我需要过滤结果以仅打印名称包含“Honda”或“Toyota”的行,我需要使用 knitr::kable() 来完成。

我尝试过创建子集,但不确定如何使用行名来创建子集。也不知道如何搜索行名是否包含文本“Honda”或“Toyota”。

这是我使用 R 的第一天,而在今天之前,我唯一的编码经验是两年前的一些 C#。这对我来说非常令人沮丧,因为我可以在不到 30 秒的时间内在 Excel 中完成此操作。但是 R 就像一门外语,我不觉得我的教科书中提到的部分解释了这个问题——尤其是对于一个全新的编码器(而且这门课不应该需要任何经验)。感谢我能得到的任何帮助!

【问题讨论】:

  • 澄清:kable 不进行过滤,只是将其渲染成美观的可打印表格。我同意,要过滤,您需要根据 rownames(mtcars) 对数据进行子集化,可能使用 grepgrepl 查找模式以查找匹配模式。如果您不熟悉正则表达式,现在是了解"Honda|Toyota" 表示*“包含文字Honda 或文字Toyota 的好时机。对于案例,我是grepl 的粉丝而不是grep像这样,但是ymmv。(一旦你知道如何过滤数据,只需将结果插入kable。)
  • 我使用了knitr::kable(mtcars[grep(‘^Honda|^Toyota’, rownames(mtcars)),]),它就像一个魅力。非常感谢!

标签: r filter kable


【解决方案1】:

加载需要的库

首先加载tidyversepackage,因为下面的代码使用了这个包中的一些有用的函数。也许像rmarkdownknitr 这样的包也需要加载。

library(tidyverse)

1。按索引列中的行名过滤行

mtcars 是数据帧类型的变量,是built-in data sets in R 之一。 Motor Trend Car Road Testsdata set 包含 1971 年杂志收集的汽车的 11 个方面(见本文末尾的表格)。

TL;DR 总结

使用filtergrepl 过滤数据框的行,通过将其与正则表达式Honda|Toyota 进行比较来查找命名索引列中的所有匹配项。

filtered_cars <- mtcars %>%
  filter(!grepl("Honda|Toyota", rownames(mtcars)))

深入解释:

汽车数据通过管道传输到函数dplyr::filter(),以仅提取满足所有给定条件的行的子集。此条件以 data-mask expression 作为函数参数给出。对于这个表达式,我们使用grep 和正则表达式Honda|Toyota。由于汽车的名称不在常规数据列中,因此无法使用mtcars$gear 之类的内容访问它们。因此必须使用rownames(mtcars) 来获取索引列中名称的向量。这个管道表达式的结果被赋值给filtered_cars 变量。

只需查看生成的数据帧的计数,就会发现有几行已被删除:

mtcars %>% count() # 32
filtered_cars %>% count() # 29

2。将数据框打印为 markdown 格式的表格

knitr::kable(
  filtered_cars[1:5,], 
  caption = "A table in a markdown document (subset of mtcar data set)"
)

输出:

|                  |  mpg| cyl| disp|  hp| drat|    wt|  qsec| vs| am| gear| carb|
|:-----------------|----:|---:|----:|---:|----:|-----:|-----:|--:|--:|----:|----:|
|Mazda RX4         | 21.0|   6|  160| 110| 3.90| 2.620| 16.46|  0|  1|    4|    4|
|Mazda RX4 Wag     | 21.0|   6|  160| 110| 3.90| 2.875| 17.02|  0|  1|    4|    4|
|Datsun 710        | 22.8|   4|  108|  93| 3.85| 2.320| 18.61|  1|  1|    4|    1|
|Hornet 4 Drive    | 21.4|   6|  258| 110| 3.08| 3.215| 19.44|  1|  0|    3|    1|
|Hornet Sportabout | 18.7|   8|  360| 175| 3.15| 3.440| 17.02|  0|  0|    3|    2|
...

【讨论】:

    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2017-07-10
    • 2010-10-15
    相关资源
    最近更新 更多