R 使用扩展和分离来构造表
我有一个类似下面的表,我想获得一些频率统计数据,这是我使用下面的代码完成的R 使用扩展和分离来构造表,r,format,frequency,tidyr,R,Format,Frequency,Tidyr,我有一个类似下面的表,我想获得一些频率统计数据,这是我使用下面的代码完成的 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'
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))
换句话说,考虑到2016年的总组数,我可以按n较大的单位对结果进行排序吗?您也可以使用tidyr
> table2 <- table%>%gather(type,measurement, -Year,-Group,-Unit)%>%
unite(year_group,Year:Group,sep = ":")%>%
spread(year_group,measurement)
这还保留了测量类型,即计数n和道具快速简便地使用:
这将使用剩余的一列来填充值。要保留这两项:
table.m <- melt(table, id.vars = c("Year", "Group", "Unit"))
dcast(table.m, Unit + variable ~ Year + Group )
如图书馆2;dcasttable,单位~年+组?我想它能做到!谢谢你们。与您的问题无关,但不要使用data.framecbind…,只需使用data.frameOn类似的注释,table是一个内置函数。不建议使用您自己的同名对象覆盖此类函数。
library(reshape2);
dcast(table, Unit ~ Year + Group )
table.m <- melt(table, id.vars = c("Year", "Group", "Unit"))
dcast(table.m, Unit + variable ~ Year + Group )
Unit variable 2012_Controle 2012_Total 2012_Tratado 2016_Controle 2016_Total 2016_Tratado
1 A n 1.0000000 3.0000000 2.0000000 NA 1.00 1.0
2 A prop 0.3333333 0.5000000 0.6666667 NA 0.25 0.5
3 B n 1.0000000 2.0000000 1.0000000 NA NA NA
4 B prop 0.3333333 0.3333333 0.3333333 NA NA NA
5 C n 1.0000000 1.0000000 NA NA NA NA
6 C prop 0.3333333 0.1666667 NA NA NA NA
7 D n NA NA NA 1.0 2.00 1.0
8 D prop NA NA NA 0.5 0.50 0.5
9 F n NA NA NA 1.0 1.00 NA
10 F prop NA NA NA 0.5 0.25 NA