R:是否可以将 knitr::kable 转换为数据帧?

R: is it possible to convert a knitr::kable to dataframe?

我正在使用 lessR 包中的 pivot 函数,创建一个类似于 Excel 的枢轴 table,其中包含两个构成垂直和水平类别的分类变量,并且每个单元格中的平均值。 (希望这是有道理的)。

我遵循了文档 (https://cran.r-project.org/web/packages/lessR/vignettes/pivot.html) 给出的代码。让我们以他们为榜样:

d <- Read("Employee")
a <- pivot(d, mean, Salary, Dept, Gender)

数据d是这样的:

                    Years Gender Dept    Salary JobSat Plan Pre Post
Ritchie, Darnell        7      M ADMN  53788.26    med    1  82   92
Wu, James              NA      M SALE  94494.58    low    1  62   74
Hoang, Binh            15      M SALE 111074.86    low    3  96   97
Jones, Alissa           5      F <NA>  53772.58   <NA>    1  65   62
Downs, Deborah          7      F FINC  57139.90   high    2  90   86
Afshari, Anbar          6      F ADMN  69441.93   high    2 100  100
Knox, Michael          18      M MKTG  99062.66    med    3  81   84
Campagna, Justin        8      M SALE  72321.36    low    1  76   84
Kimball, Claire         8      F MKTG  61356.69   high    2  93   92

主元table a 很好 table,在单元格内容等方面完全符合我的要求。它看起来是 knitr_kable.

 Gender  F          M               
 Dept                        
-------  ---------  ---------
   ACCT   63237.16   59626.20
   ADMN   81434.00   80963.35
   FINC   57139.90   72967.60
   MKTG   64496.02   99062.66
   SALE   64188.25   86150.97

接下来,我想用它制作一个数据框,以便更轻松地在我的代码中进行操作并将其复制到剪贴板。但是,我不知道如何将 knitr_kable 转换为数据框。这是我的代码及其导致的错误:

as.data.frame(a)

Error in as.data.frame.default(a) : 
  cannot coerce class ‘"knitr_kable"’ to a data.frame

knitr-documentation 没有说明这种转换 - 它只是关于将数据帧转换为 knitr_kable,这与我想要的相反。

我也试过 pivottabler,但这有类似的问题:生成的 class 也不能强制转换为数据框。

这里有两个可能的答案:

最直接:自己整理数据

如果您对 tidyverse 风格的方法持开放态度,只需几行代码即可自行整理和总结。这将为您提供可以立即使用的数据表输出。

# load packages
library(lessR)
library(dplyr)
library(tidyr)

# load data
d <- Read("Employee")

# use tidyverse-style code to pivot and summarise the data yourself
d %>%
  group_by(Gender, Dept) %>%
  summarise(Salary_mean = mean(Salary)) %>%
  pivot_wider(names_from= "Gender", values_from = "Salary_mean")

将 knitr::kable() 降价输出读取到数据框中

如果您更喜欢从 knitr::kable() 输出向后工作到数据框,这在这个 SO 问题中得到解决:Markdown table to data frame in R