首页 > 解决方案 > R:是否可以将 knitr::kable 转换为数据帧?

问题描述

我正在使用pivotlessR 包中的函数来创建一个类似于 Excel 的数据透视表,其中包含两个构成垂直和水平类别的分类变量,以及每个单元格中的平均值。(希望这是有道理的)。

我遵循了文档(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

数据透视a表是一个很好的表格,正如我希望它在单元格内容等方面的外观一样。它似乎是一个 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 ‘&quot;knitr_kable"’ to a data.frame

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

我也尝试过pivottabler,但这也有类似的问题:结果类也不能被强制转换为数据框。

标签: rdataframepivotknitrkable

解决方案


这里有两个可能的答案:

最直接:自己整理数据

如果您对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


推荐阅读