【问题标题】:Why is Kable adding a non-existent column to my table?为什么 Kable 会在我的表中添加一个不存在的列?
【发布时间】:2018-09-17 03:03:24
【问题描述】:

我已从 CSV 导入数据并根据这些数据创建了一个表格。下面的代码是以我希望呈现的方式收集数据的一种(诚然可能是一种迂回的方式):

sc_data_specialty_1_count<-as.vector(table(sc_data$SPECIALTY_1)) #CREATE TABLE OF SPECIALTY_1 COUNTS
sc_data_specialty_1_percent<-as.vector(table(sc_data$SPECIALTY_1)/nrow(sc_data)) #CREATE TABLE OF SPECIALTY_1 PERCENT.
sc_data_specialty_1_table<-rbind(sc_data_specialty_1_count,sc_data_specialty_1_percent*100) #COMBINE TABLES
sc_data_specialty_1_table<-round(sc_data_specialty_1_table,digits = 0) #ROUND TABLE
rownames(sc_data_specialty_1_table)<-c("Count","Proportion (%)") #ADD ROW NAMES

这个矩阵(sc_data_specialty_1_table)如下所示:

             [,1] [,2] [,3] [,4] [,5] [,6] [,7]
Count          2   30    1    2    8    1    1
Proportion (%) 4   67    2    4   18    2    2

注意有七列。我尝试使用以下代码在 RMarkdown 中生成一个 kable 表:

kable(sc_data_specialty_1_table, col.names=c("ENT","General Surgery","Neurosurgery","Ophthalmology","Orthopedic","PM&R","Urology"),format="latex",booktabs=TRUE, caption = "Professors by specialty") %>%  #Creates an RMarkdown table using kable()

kable_styling(latex_options=c("scale_down","hold_position","striped")) #Scales down the table to fit in the page width.

我试图告诉我为列提供的名称与列数不符时出错,但我给出了七个名称:

Error in dimnames(x) <- dn : 
  length of 'dimnames' [2] not equal to array extent
Calls: <Anonymous> ... eval -> eval -> %>% -> eval -> eval -> kable -> 
colnames<-
Execution halted

当我将 Kable 剥离到其最基本的命令 kable(sc_data_specialty_1_table) 时,输出如下:

无论出于何种原因,Kable 都在添加第一列数据,而这些数据实际上并不(也不应该)存在于 sc_data_specialty_1_table 中。

当我昨天处理这个特定的降价文档时,我没有遇到这个问题。从昨天到今天,我没有更改任何代码。这发生在我构建的 Markdown 中的多个表上。

  1. 有人知道为什么要添加这个额外的列吗?
  2. 如果您能解释我要制作的表格类型(最上面一行的原始计数,最下面一行中该专业的比例 (%))并且知道将它们放在一个表格中的更简单的方法比我正在做的,这会很有帮助。

谢谢。

【问题讨论】:

  • 您使用的是kableExtra 包吗?否则我找不到kable_styling。没有它我无法重现问题,因此问题可能存在。

标签: r r-markdown kable


【解决方案1】:

适用于采样的 data.frame。

library(knitr)

df <- data.frame(Count = c(2, 30, 1, 2, 8, 1, 1),
                 Proportion = c(4, 67, 2, 4, 18, 2, 2))


kable(
  t(df),
  col.names = c(
    "ENT",
    "General Surgery",
    "Neurosurgery",
    "Ophthalmology",
    "Orthopedic",
    "PM&R",
    "Urology"
  ),
  caption = "Professors by specialty",
  row.names = T
)

|           | ENT| General Surgery| Neurosurgery| Ophthalmology| Orthopedic| PM&R| Urology|
|:----------|---:|---------------:|------------:|-------------:|----------:|----:|-------:|
|Count      |   2|              30|            1|             2|          8|    1|       1|
|Proportion |   4|              67|            2|             4|         18|    2|       2|

【讨论】:

  • 我不知道为什么会出现这个问题。老实说,我关闭了所有东西,重新启动了计算机,重新导入了从中获取数据的 .CSV,然后它就可以工作了。我真的无法解释。不过,我感谢您抽出时间进行调查。谢谢。
猜你喜欢
  • 2021-07-04
  • 2013-03-31
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 2011-07-07
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多