我有一个类似下面的表格想获得一些频率统计数据,我使用下面的代码完成了。
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,'%)'))
换句话说,考虑到n
中的Total
群,我可以按更高2016
的单位订购结果吗?
答案 0 :(得分:2)
你也可以使用tidyr
> table2 <- table%>%gather(type,measurement, -Year,-Group,-Unit)%>%
unite(year_group,Year:Group,sep = ":")%>%
spread(year_group,measurement)
这也保留了测量类型,即count(n)和prop
答案 1 :(得分:1)
使用reshape2
快捷方便:
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