我想在R中创建发布质量描述性表格,其中包含按年份和按组(规格)的观察次数。
我有以下数据:
year npatient nclaim spec
2011 1 2 1
2012 7 5 1
2013 6 4 1
2011 4 1 2
2012 6 9 2
2013 7 5 2
2011 10 10 3
2012 7 8 3
2013 5 3 3
我想输出看起来像这样:
2011 2012 2013
Spec =1
npatient 1 7 6
nclaim 2 5 4
Spec =2
npatient 4 6 7
nclaim 1 9 5
Spec =3
npatient 10 7 5
nclaim 10 8 3
感谢您的帮助。
答案 0 :(得分:3)
我们可以使用tidyverse
得到类似的输出,如下所示。
注意,但是,我不知道R中支持的确切输出(我相信python的pandas
可以按问题显示它)。来自pivot_*
的更新tidyr
函数可能是可行的:
df %>%
gather(key,val,-c(spec,year)) %>%
spread(year,val)
spec key 2011 2012 2013
1 1 nclaim 2 5 4
2 1 npatient 1 7 6
3 2 nclaim 1 9 5
4 2 npatient 4 6 7
5 3 nclaim 10 8 3
6 3 npatient 10 7 5
我们可以将以上内容输入kable
(不是很漂亮):
df %>%
gather(key,val,-c(spec,year)) %>%
spread(year,val) %>%
knitr::kable()
| spec|key | 2011| 2012| 2013|
|----:|:--------|----:|----:|----:|
| 1|nclaim | 2| 5| 4|
| 1|npatient | 1| 7| 6|
| 2|nclaim | 1| 9| 5|
| 2|npatient | 4| 6| 7|
| 3|nclaim | 10| 8| 3|
| 3|npatient | 10| 7| 5|
或者(如果目标是为出版物准备印刷,则没什么用):
df %>%
gather(key,val,-c(spec,year)) %>%
spread(year,val) %>%
split(.$spec)
$`1`
spec key 2011 2012 2013
1 1 nclaim 2 5 4
2 1 npatient 1 7 6
$`2`
spec key 2011 2012 2013
3 2 nclaim 1 9 5
4 2 npatient 4 6 7
$`3`
spec key 2011 2012 2013
5 3 nclaim 10 8 3
6 3 npatient 10 7 5
数据:
df <- structure(list(year = c(2011L, 2012L, 2013L, 2011L, 2012L, 2013L,
2011L, 2012L, 2013L), npatient = c(1L, 7L, 6L, 4L, 6L, 7L, 10L,
7L, 5L), nclaim = c(2L, 5L, 4L, 1L, 9L, 5L, 10L, 8L, 3L), spec = c(1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L)), class = "data.frame", row.names = c(NA,
-9L))