【发布时间】: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
我现在有四个问题:
-
在我的真实数据框中,我没有 2 个,而是 21 个不同的问题,而且它们并不都采用 Q_Daily 的形式。如何避免编写包含所有 21 个问题的字符串?我使用
my_questions <- c("Q1_Daily", "Q2_Daily", ...., "Grand_Total")将它们收集到一个向量中。有没有办法将 my_questions 提供给表格表达式 -
如何转置表格以使列标题为女性和男性,并且每个问题与两行相关联。键入 tranpose(tabular(..)) 或 dcast(melt(tablular(...))) 分别让我胡言乱语和错误消息
-
我的真实数据框要大得多(我只展示了几行和 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
我该如何解决这个问题?
- 最后,如何使用 openxlsx 将表格输出写入 Excel 工作簿,它的 writeData 函数似乎与数据帧正常工作?尝试使用 as.data.frame 将表格对象强制转换为数据框不起作用。
对这个冗长的问题表示歉意,并在此先感谢您的帮助
托马斯·飞利浦
【问题讨论】:
-
Q3 的部分解决方案 - 如果我更改 df_tmp 中的列名,它会起作用。它似乎记得我在玩具示例中使用的列名。也就是说,我不清楚我是如何让它忘记过去看到的名字