2011-11-30 116 views
2

我知道有一種方法可以輕鬆地使用一個包來做到這一點......幾個月前,我發現了這個包,然後做了它。但是,我當時沒有寫下鏈接,現在我無法再爲我的生活找到解決方案!如何在R中創建嵌套表?

我的問題是:你如何在R中創建一個嵌套表?例如,我有一個個人數據表。每一行都是不同的人。每列包含一個變量,如年齡,性別,身高等

我知道使用table命令我可以做這樣的事情:table(data $ gender,data $ ageCategory)。

這將製作一個2×2的表格,裏面有計數。

不過,我想提出一個嵌套表,類似於這裏的一個(忽略與總計最後一欄):http://psycnet.apa.org/journals/ror/32/2/images/ror_32_2_199_tbl1a.gif

也就是說,我想提出一個表,性別作爲列,然後將行作爲年齡類別,並在每行內添加高度類別的其他行。

我發現了一個很容易做到的包,現在我再也找不到它了!

感謝任何人可以提供幫助。這是一個有點愚蠢的問題,但我想我可能在這裏有更多的運氣。也許「嵌套表」並不是真正的名字。

+0

我想你正在尋找列和行的名字。嘗試搜索,因爲嵌套表將是表格單元格內的單獨表格(我認爲),所以可能不會給你你想要的。哦...我沒有讀剩下的。您可能正在尋找合併的單元格。對於那個很抱歉。 – craniumonempty

+0

你對「嵌套表」的定義是什麼?一行不能包含一行。無論你想要一個多維數組還是一個'list'變量,例如'myfile'包含'$ age,$ gender,$ height'元素,然後每個這樣的元素可以有子元素,例如。 '年齡$ foo,年齡$ bar'。 –

+0

您是否想要生成一個嵌套表作爲輸出到LaTex,還是你想使用嵌套表作爲存儲數據的手段(這可以使用普通的data.frames輕鬆完成)。 –

回答

3

一個例子的數據集(它總是在你的問題用一個好主意):

dat = data.frame(value = runif(100), 
       age = round(runif(100, min = 9, max = 11)) , 
       gender = sample(c("Male", "Female"), 100, replace = TRUE), 
       school = sample(c("Public", "Private"), 100, replace = TRUE)) 

而現在生產的東西沿着您發佈的示例表的行有用:

library(plyr) 
tab = count(dat, c("age", "gender", "school")) 
# The contents of tab: 
# age gender school freq 
# 1 9 Female Private 6 
# 2 9 Female Public 6 
# 3 9 Male Private 7 
# 4 9 Male Public 8 
# 5 10 Female Private 11 
# 6 10 Female Public 13 
# 7 10 Male Private 10 
# 8 10 Male Public 14 
# 9 11 Female Private 3 
# 10 11 Female Public 11 
# 11 11 Male Private 3 
# 12 11 Male Public 8 

爲了生成乳膠的表格,請查看xtable包。對於Word等,可能最容易對count的輸出執行一些手動操作。

+0

感謝您的幫助!我也終於找到了我一直在考慮的軟件包 - 它被稱爲MASS。我使用您提供的數據來執行以下操作: library(MASS);ftable(xtabs(公式=〜學校+性別+年齡,數據= dat)) – Alexander

1

您可以將兩個以上的變量傳遞給table,以獲取更多方式的數據集計數。這是對table幫助頁面示例的修改。

counts <- with(airquality, table(
    OzCategory = cut(airquality$Ozone, seq(0, 180, 20)), 
    Month, 
    TempHi = Temp > 75 
)) 
print(counts, zero.print = ".") 
+0

感謝您的幫助!我不知道這是可能的 - 將來一定會派上用場! – Alexander