如何编写表函数来强制 table() 输出中列名的顺序?

B.K*_*obi 5 sorting algorithm r r-colnames

我想更改R中表函数的列顺序输出。我只能找到有关操作 data.table 列顺序的信息(不是我想要的)。当我使用 R (字母顺序?)时,列的顺序(“否”和“是”)始终保持一致,但由于某种原因,我的一些表以不同的顺序返回(“是”和“否”) ”)。我需要这些保持一致(因为我正在组合一些表格)并进行排序,以便“是”位于最后。我正在制作数百个带有相关统计数据的表格,并有一些定制的公式来帮助我 - 但我无法仔细检查每个表格的顺序 - 所以我想告诉R具体做什么。当我进行卡方测试时,我不想将每个表更改为 data.frame,对列重新排序,然后以某种方式更改回表。表列的顺序很重要,因为我要组合一些表(R 会错误地强制这些表),并且还执行优势比,因此我需要“是”始终排在最后。出于好奇(不必要),有人可以向我解释为什么我的一些数据按字母顺序生成表列,但其他数据则不然。我附上了我的数据的简化版本。

df <- data.frame(treatment = c("A","A","B","A","B","A","B","B"),
    symptom = c("Yes","Yes","No","No","Yes","Yes","Yes","No"))
table(df)
Run Code Online (Sandbox Code Playgroud)

由于此示例生成了我想要的表列顺序,请编写代码将列顺序从“否”、“是”更改为“是”、“否”。

akr*_*run 5

我们可以使用factorwithlevels指定,因为ordering是基于字母顺序的,其中“N”在“Y”之前(第一个字母等等)。这可以通过在自定义订单中转换为factorwith来更改。levels

table(df$treatment, factor(df$symptom, levels = c("Yes", "No")))
#     Yes No
#  A   3  1
#  B   2  2
Run Code Online (Sandbox Code Playgroud)

或者使用transform然后执行table

table(transform(df, symptom = factor(symptom, levels = c("Yes", "No"))))
#         symptom
#treatment Yes No
#       A   3  1
#       B   2  2
Run Code Online (Sandbox Code Playgroud)

但是,我们可以在之后table通过指定顺序(列索引或列名称)来执行此操作,但如果我们不知道哪些级别,这会变得更加乏味

table(df)[, 2:1]
#        symptom
#treatment Yes No
#       A   3  1
#       B   2  2
Run Code Online (Sandbox Code Playgroud)