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
我正在使用 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