【问题标题】:4 Tabular questions including error with duplicates R4 表格问题,包括重复错误 R
【发布时间】:2023-03-25 01:24:01
【问题描述】:

我有一个包含一组问卷答案的数据框

DAILY_QUESTIONS  <- c("Q1_Daily",  "Q2_Daily",   "Q3_Daily")

以及受访者的性别。这是一个展示我的数据的玩具数据集:

       UserId Days_From_First_Use    Sex Q1_Daily Q2_Daily Q3_Daily Region
1       A                   0 Female        3        2        1     US
2       A                   1 Female        1        0        0     US
3       A                   2 Female        1        1        0     US
4       A                   3 Female        0        2        0     US
5       A                   4 Female        1        1        1     US
6       B                   0   Male        4        8        2     CA
7       B                   2   Male        2        2        1     CA
8       B                   4   Male        5        6        5     CA
9       B                   5   Male        4        5        5     CA
10      C                   0 Female        5        7        2     UK
11      C                   1 Female        2        2        2     UK
12      C                   2 Female        5        5        4     UK
13      C                   3 Female        6        5        3     UK
14      C                   4 Female        6        6        4     UK
15      D                   0   Male        5        3        5     US
16      D                   1   Male        5        3        4     US
17      D                   2   Male        4        2        6     US
18      D                   3   Male        0        0        1     US
19      D                   4   Male        1        1        1     US

我使用命令创建了一个表格摘要

 tabular((Sex + 1) ~ (n=1) + Format(digits=2)*(Q1_Daily + Q2_Daily + Q3_Daily)*(mean + sd), df_tmp)

并得到正确的输出:

               Q1_Daily     Q2_Daily     Q3_Daily    
 Sex    n  mean     sd  mean     sd  mean     sd 
 Female 10 3.0      2.3 3.1      2.4 1.7      1.6
 Male    9 3.3      1.9 3.3      2.5 3.3      2.1
 All    19 3.2      2.1 3.2      2.4 2.5      2.0

我现在有四个问题:

  1. 在我的真实数据框中,我没有 2 个,而是 21 个不同的问题,而且它们并不都采用 Q_Daily 的形式。如何避免编写包含所有 21 个问题的字符串?我使用my_questions &lt;- c("Q1_Daily", "Q2_Daily", ...., "Grand_Total") 将它们收集到一个向量中。有没有办法将 my_questions 提供给表格表达式

  2. 如何转置表格以使列标题为女性和男性,并且每个问题与两行相关联。键入 tranpose(tabular(..)) 或 dcast(melt(tablular(...))) 分别让我胡言乱语和错误消息

  3. 我的真实数据框要大得多(我只展示了几行和 3 个问题)

    df_test

小标题:2,418 x 6

UserId Sex Days_From_First_Use Q1_Daily Q2_Daily Q3_Daily 1 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女性 0 天 3 2 1 2 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女性 1 天 1 0 0 3 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女 2 天 1 1 0 4 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女 3 天 0 2 0 5 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女 4 天 1 1 1 6 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女性 5 天 2 3 0 7 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女 6 天 1 1 0 8 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女 16 天 0 1 0 9 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女 17 天 0 0 0 10 45ae06dd-37eb-492c-9a57-ca75d29d91f1 女 18天 0 0 0

...还有 2,408 行

但如果我尝试在其上使用相同的表格函数,我会收到一条错误消息:

tabular((Sex + 1) ~ (n=1) + Format(digits=2)*(Q1_Daily + Q2_Daily )*(mean + sd), as.data.frame(df_test))
Error in term2table(rows[[i]], cols[[j]], data, n) : 
  Duplicate values: Sex and Q1_Daily

我该如何解决这个问题?

  1. 最后,如何使用 openxlsx 将表格输出写入 Excel 工作簿,它的 writeData 函数似乎与数据帧正常工作?尝试使用 as.data.frame 将表格对象强制转换为数据框不起作用。

对这个冗长的问题表示歉意,并在此先感谢您的帮助

托马斯·飞利浦

【问题讨论】:

  • Q3 的部分解决方案 - 如果我更改 df_tmp 中的列名,它会起作用。它似乎记得我在玩具示例中使用的列名。也就是说,我不清楚我是如何让它忘记过去看到的名字

标签: r dplyr tabular


【解决方案1】:

我建议您使用基于dplyr 的方法,因为它可以轻松管理大量问题。你的名字会改变,但结果是一样的。代码如下:

library(dplyr)
#Functions
total <- function(x) {sum(!is.na(x))}
stats <- c('mean', 'sd', 'total')
#Code
new <- df %>% select(Sex,contains('Daily')) %>%
  group_by(Sex) %>% summarise_all(.funs = stats) %>%
  bind_rows(
    df %>% select(contains('Daily')) %>%
      summarise_all(.funs = stats) %>%
      mutate(Sex='Total')
  ) %>%
  rename(Myvar=Sex) %>%
  select(sort(current_vars()))

输出:

# A tibble: 3 x 10
  Myvar Q1_Daily_mean Q1_Daily_sd Q1_Daily_total Q2_Daily_mean Q2_Daily_sd
  <chr>         <dbl>       <dbl>          <int>         <dbl>       <dbl>
1 Fema~          3           2.31             10          3.1         2.42
2 Male           3.33        1.87              9          3.33        2.55
3 Total          3.16        2.06             19          3.21        2.42
# ... with 4 more variables: Q2_Daily_total <int>, Q3_Daily_mean <dbl>,
#   Q3_Daily_sd <dbl>, Q3_Daily_total <int>

使用的一些数据:

#Data
df <- structure(list(UserId = c("A", "A", "A", "A", "A", "B", "B", 
"B", "B", "C", "C", "C", "C", "C", "D", "D", "D", "D", "D"), 
    Days_From_First_Use = c(0L, 1L, 2L, 3L, 4L, 0L, 2L, 4L, 5L, 
    0L, 1L, 2L, 3L, 4L, 0L, 1L, 2L, 3L, 4L), Sex = c("Female", 
    "Female", "Female", "Female", "Female", "Male", "Male", "Male", 
    "Male", "Female", "Female", "Female", "Female", "Female", 
    "Male", "Male", "Male", "Male", "Male"), Q1_Daily = c(3L, 
    1L, 1L, 0L, 1L, 4L, 2L, 5L, 4L, 5L, 2L, 5L, 6L, 6L, 5L, 5L, 
    4L, 0L, 1L), Q2_Daily = c(2L, 0L, 1L, 2L, 1L, 8L, 2L, 6L, 
    5L, 7L, 2L, 5L, 5L, 6L, 3L, 3L, 2L, 0L, 1L), Q3_Daily = c(1L, 
    0L, 0L, 0L, 1L, 2L, 1L, 5L, 5L, 2L, 2L, 4L, 3L, 4L, 5L, 4L, 
    6L, 1L, 1L), Region = c("US", "US", "US", "US", "US", "CA", 
    "CA", "CA", "CA", "UK", "UK", "UK", "UK", "UK", "US", "US", 
    "US", "US", "US")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多