簡體   English   中英

R:在交叉表中顯示小計

[英]R: display subtotals in crosstables

對於報告,我需要創建一些具有多個層次結構的交叉表(使用 r-markdown)。

讓我們制作一些假數據:

n <- 100
df <- data.frame(
                 language = sample(c("Ger", "Eng", "Spa"), size = n, replace = TRUE),
                 sex = sample(c("female", "male"), size = n, replace = TRUE),
                 agegrp = sample(c("<=30", ">30"), size = n, replace = TRUE),
                 smoker = sample(c("yes", "no"), size = n, replace = TRUE)
                 )

現在我可以使用table()addmargins()為總數創建簡單的交叉表:

        Agegroup
Language <=30 >30 Sum
     Eng   16  16  32
     Ger   14  13  27
     Spa   17  24  41
     Sum   47  53 100

這很好,但現在我需要創建一些具有層次結構的高級交叉表。 這就是我使用ftable() -函數的原因。 舉個例子:

> ftable(Language = df$language, Sex = df$sex, Smoker = df$smoker)
                Smoker no yes
Language Sex                 
Eng      female         7   9
         male           7   9
Ger      female         5  11
         male           4   7
Spa      female        12  10
         male          11   8

有沒有辦法或有任何特殊的軟件包來計算總計或小計?

例如,我想按行和/或按列計算總數:

                Smoker no yes Sum
Language Sex                 
Eng      female         7   9  16
         male           7   9  16
Ger      female         5  11  16
         male           4   7  11
Spa      female        12  10  22
         male          11   8  19
Sum                    46  54 100   

或者是否有任何 function 或“語法”來定義要計算的小計? 例如:

                Smoker no yes
Language Sex                 
Eng      female         7   9
         male           7   9
         Subtotal      14  18
Ger      female         5  11
         male           4   7
         Subtotal       9  18
Spa      female        12  10
         male          11   8
         Subtotal      23  18
ftable(addmargins(table(df[c('language', 'sex', 'smoker')])))
                smoker  no yes Sum
language sex                      
Eng      female          9  10  19
         male           10   9  19
         Sum            19  19  38
Ger      female          7   5  12
         male            9   8  17
         Sum            16  13  29
Spa      female         11   8  19
         male            9   5  14
         Sum            20  13  33
Sum      female         27  23  50
         male           28  22  50
         Sum            55  45 100



ftable(addmargins(table(df[c('language', 'sex', 'smoker')]), 2))
                smoker no yes
language sex                 
Eng      female         9  10
         male          10   9
         Sum           19  19
Ger      female         7   5
         male           9   8
         Sum           16  13
Spa      female        11   8
         male           9   5
         Sum           20  13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM