可悲的是,我不熟悉data.table
和dplyr
(或任何包可以提供帮助),在线搜索以及查看这两个包的文档都没有回答我的问题。
我经常需要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
的性别分布与Company2
,Company3
和Company4
的合并分布进行比较,而忽视Company5
该怎么办?完全?
该表应该是:
Company1 Company234
male 1 6
female 0 8
尴尬的方法是重新定义Company
- 变量或使用正确的分组创建新变量并将Company5
设置为NA
。
我想要一种方法,我不需要定义一个新变量,而是可以暂时重新定义table
- 呼叫中的组。
答案 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))))