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