2011-11-30 153 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