【发布时间】:2017-07-15 22:15:33
【问题描述】:
我有一张像下面这样的表格,想获得一些频率统计信息,我已经使用下面的代码完成了。
df <- data.frame(cbind(sample(c('Controle','Tratado'),
10, replace = T),
sample(c(2012,2016),10,T),
c('A','B','A','B','C','D','D','A','F','A')))
colnames(df) <- c('Group','Year','Unit')
table <- df %>%
group_by(Year,Group) %>%
count(Unit) %>%
mutate(prop = prop.table(n)) %>%
bind_rows(df %>%
mutate(Group ="Total") %>%
group_by(Year, Group) %>%
count(Unit)) %>%
mutate(prop = prop.table(n))
但是,是否有一些 tidyr 函数的组合可以帮助我以某种方式重塑表格,使 Unit 观察结果位于行上,并且 Group/Year 的每个组合都有一个列?
另外,由于单位可能不存在于两个组和/或年份,如果是这种情况,我想将单元格留空。
非常感谢。
编辑: 有没有办法让决赛桌按照 2016 年 n 最大的单位对行进行排序?最后我只会使用安排。但是,我也想粘贴 n 和 prop 列,这会使结果不再是数字。
df <- data.frame(cbind(sample(c('Controle','Tratado'),
10, replace = T),
sample(c(2012,2016),10,T),
c('A','B','A','B','C','D','D','A','F','A')))
colnames(df) <- c('Group','Year','Unit')
table <- df %>%
group_by(Year,Group) %>%
count(Unit) %>%
mutate(prop = prop.table(n)) %>%
bind_rows(df %>%
mutate(Group ="Total") %>%
group_by(Year, Group) %>%
count(Unit)) %>%
mutate(prop = prop.table(n))
is.num <- sapply(table, is.numeric)
table[is.num] <- lapply(table[is.num], round, 4)
table <- table %>%
mutate(Frequency = paste0(n,' (', 100*prop,'%)'))
换句话说,考虑到2016 中的Total 组,我可以按具有更大n 的单位对结果进行排序吗?
【问题讨论】:
-
如
library(reshape2); dcast(table, Unit ~ Year + Group )? -
我认为它可以胜任!谢谢
-
ps。与您的问题无关,但不要使用
data.frame(cbind(...,只需使用data.frame -
类似地,
table是一个内置函数。不建议用您自己的类似名称的对象覆盖此类函数。