计算表中的出现次数并显示rmarkdown,可伸缩性

时间:2018-05-18 08:05:39

标签: r dataframe r-markdown

我们以下面的数据帧为例:

df <- data.frame(state = c('up', 'up', 'up', 'down', 'down', 'up', 'down', 'down'), type = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'))

要计算每种可能的A / B和上/下组合的发生次数,我会按如下方式进行计算:

a1 <- nrow(subset(subset(df, state == 'up'), type == 'A'))
a2 <- nrow(subset(subset(df, state == 'down'), type == 'A'))
a3 <- nrow(subset(subset(df, state == 'up'), type == 'B'))
a4 <- nrow(subset(subset(df, state == 'down'), type == 'B'))

并且要在Rmarkdown表中显示我会按如下方式执行:

| State/type     |   A    |    B   | 
|:--------------:|:------:|:------:|
| Up             | `r a1` | `r a3` |
| Down           | `r a2` | `r a4` |

我的问题是:有更好的方法吗?当你有许多因子组合并且规模很小时,这种方法变得非常繁琐。

1 个答案:

答案 0 :(得分:1)

我们可以使用table

tbl <- table(df)

并将其转换为data.frame

as.data.frame.matrix(tbl)

或者如果我们还需要'state'列(而不是上面的行名)

library(tidyverse)
count(df, state, type) %>% 
              spread(type, n)

在rmarkdown中,以上内容可以用作

```{r echo = FALSE, include = FALSE, cache=FALSE}
df <- data.frame(state = c('up', 'up', 'up', 'down', 'down', 'up', 
   'down', 'down'), type = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'))
library(dplyr)
library(tidyr)
library(kableExtra)
out <- count(df, state, type) %>% 
              spread(type, n)

```



```{r code1, results = 'asis', echo = FALSE}
kable(out, "html") %>%
  kable_styling()
```