[英]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.