在 R 中旋转 CreateTableOne 以将级别显示为列 headers?

Pivoting CreateTableOne in R to show levels as column headers?

我正在尝试使用 CreateTableOne 函数在 R 中生成一些描述性摘要 table。我有一系列变量都具有相同的响应 options/levels(是或否),并希望生成一个宽 table,其中级别是列标题,如下所示:

Variable Yes No
Var1 1 7
Var2 5 2

但是 CreateTableOne 生成嵌套的长 tables,其中有一列用于 Level,其中 Yes 和 No 是行中的值,如下所示:

Variable Level Value
Var1 Yes 1
Var1 No 7

有没有办法在仍然使用此功能的同时调整 table 以获得我想要的功能,或者我应该改用其他功能?

这是我当前的代码:

    vars <- c('var1', 'var2')
    Table <- CreateTableOne(vars=vars, data=dataframe, factorVars=vars)
    Table_exp <- print(Table, showAllLevels = T, varLabels = T, format="f", test=FALSE, noSpaces = TRUE, printToggle = FALSE)
    write.csv(Table_exp, file = "Table.csv")

谢谢!

您只能使用 pivot_wider 来制作 table。这是您的数据:

library(tidyverse)
  dataframe = data.frame(Variable = c("Var1", "Var1", "Var2", "Var2"),
                         Level = c("Yes", "No", "Yes", "No"),
                         Value = c(1, 7, 5, 2))

您的数据:

  Variable Level Value
1     Var1   Yes     1
2     Var1    No     7
3     Var2   Yes     5
4     Var2    No     2

您可以使用此代码使更宽 table:

dataframe %>% 
    pivot_wider(names_from = "Level", values_from = "Value")

输出:

# A tibble: 2 × 3
  Variable   Yes    No
  <chr>    <dbl> <dbl>
1 Var1         1     7
2 Var2         5     2

所以我从同事那里得到了这个问题的答案,它与 Quinten 的建议非常相似,但有一些额外的步骤来解释我的原始数据的结构。

我在问题中提供的示例 tables 是我想要的输出,而不是我的原始数据示例。数字值不是我数据集中的值,而是计算的记录数,下面的解决方案包括执行该计算的步骤。

这是我的原始数据的样子,实际上它的结构很宽:

Participant_ID Var1 Var2 Age
1 Yes No 20
2 No No 30

我们首先创建了一个仅包含相关变量的子集:

subset <- data |> select(Participant_Id, Var1, Var2)

然后首先将数据旋转更长的时间,以便计算我想要的输出计数 table。在此代码中,我们指定我们不想旋转 Participant_ID 并创建名为 Vars 和 Response 的列。

subsetlong <- subset |> pivot_longer(-c("Participant_Id"), names_to = "Vars", values_to="Response")

这是 subsetlong 的样子:

Participant_ID Vars Response
1 Var1 Yes
1 Var2 No
2 Var1 No
2 Var2 No

然后我们通过 Vars 计算计数,将其放入一个名为 counts 的新数据框中:

counts <- subsetlong |> group_by(Vars) |> count(Response)

这才是最重要的:

Vars Response n
Var1 Yes 1
Var1 No 7
Var2 Yes 5
Var2 No 2

现在计算已经完成,我们再次将其转向宽,指定任何 NA 都应显示为 0:

counts_wide <- counts |> pivot_wider(names_from="Response", values_from="n", values_fill = 0)

终于得到了想要的结构:

Vars Yes No
Var1 1 7
Var2 5 2