快速重新定义表组的方法?

时间:2017-01-30 14:54:41

标签: r grouping

可悲的是,我不熟悉data.tabledplyr(或任何包可以提供帮助),在线搜索以及查看这两个包的文档都没有回答我的问题。

我经常需要table()两个变量,并且几乎同样需要更改变量的预定义类别以进行分组。我真的认为应该有一个快速的方法来做到这一点,但我无法弄清楚如何。

一些示例数据:

mydata <- structure(list(sex = structure(c(2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 
                    1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L), .Label = c("male", 
                    "female"), class = "factor"), company = structure(c(3L, 5L, 3L, 
                    2L, 5L, 4L, 2L, 4L, 4L, 5L, 3L, 3L, 2L, 2L, 3L, 3L, 5L, 3L, 5L, 
                    1L), .Label = c("Company1", "Company2", "Company3", "Company4", "Company5"
                    ), class = "factor")), .Names = c("sex", "company"), row.names = c(11993L, 
                    21167L, 9263L, 6086L, 18854L, 15157L, 4805L, 13789L, 17777L, 18820L, 
                    9810L, 10167L, 6968L, 5769L, 7961L, 12034L, 18046L, 7858L, 22404L, 22647L), 
                    class = "data.frame")

现在假设我需要公司的性别分布。快速table(mydata$sex, mydata$company)会导致

       Company1 Company2 Company3 Company4 Company5
  male          1        1        3        2        1
  female        0        3        4        1        4

但是如果我需要将Company1的性别分布与Company2Company3Company4的合并分布进行比较,而忽视Company5该怎么办?完全?

该表应该是:

        Company1 Company234 
  male          1        6
  female        0        8

尴尬的方法是重新定义Company - 变量或使用正确的分组创建新变量并将Company5设置为NA

我想要一种方法,我不需要定义一个新变量,而是可以暂时重新定义table - 呼叫中的组。

1 个答案:

答案 0 :(得分:4)

定义一个新变量只涉及两行代码加上table语句本身:

co <- mydata$company
levels(co) <- c("co1", "co234", "co234", "co234", NA)

with(mydata, table(sex, co))

,并提供:

        co
sex      co1 co234
  male     1     6
  female   0     8

或一行:

with(mydata, table(sex, co = `levels<-`(company, c("co1", "co234", "co234", "co234", NA))))