描述表,按年份和组列出了观察次数

时间:2019-08-23 15:54:06

标签: r

我想在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

感谢您的帮助。

1 个答案:

答案 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))