Tabm(Stata)等效于R

时间:2018-07-27 14:16:02

标签: r stata

我有几个分类变量,值从1-3开始。我想创建一个类似于Stata中tabm功能生成的表,向我显示每个分类变量的观察次数。

在Stata中,我只需写:

  tabm Variable1 Variable2 Variable3

这是表格的外观(obs = observations):

             Value=1    Value=2   Value=3
Variable1      5 obs     10 obs    12 obs
Variable2      2 obs     9 obs     0 obs
Variable3      12 obs    9 obs     3 obs

我阅读了一些有关Cross.Table的文章,但是我的R版本不接受gmodels(R版本3.4.4)。

3 个答案:

答案 0 :(得分:1)

假设每个变量具有每个类别值并且长度相等,我们可以使用rbind和table:

x <- c(1,1,1,1,2,2,3,3)
y <- c(1,2,2,2,3,3,3,3)
z <- c(1,1,2,3,2,2,2,2)

rbind(table(x), table(y), table(z)) #gives us:

      1 2 3
 [1,] 4 2 2
 [2,] 1 3 4
 [3,] 2 5 1

答案 1 :(得分:0)

我们可以在table()中使用sapply()

示例

t(sapply(df1[, c("Variable1", "Variable2", "Variable3")], table))

屈服

> t(sapply(df1[, c("Variable1", "Variable2", "Variable3")], table))
           1  2  3
Variable1 10 17 23
Variable2 20 14 16
Variable3 11 19 20

数据

set.seed(42)
df1 <- setNames(data.frame(replicate(5, sample(3, 50, replace = TRUE))), 
                paste0("Variable", 1:5))

答案 2 :(得分:0)

或具有与上述相同数据的tidyverse替代项:

library(dplyr)
library(tidyr)

gather(df1, var, value) %>%
  count(var, value) %>%
  spread(value, n)

屈服

# A tibble: 5 x 4
  var         `1`   `2`   `3`
  <chr>     <int> <int> <int>
1 Variable1    10    17    23
2 Variable2    20    14    16
3 Variable3    11    19    20
4 Variable4    20    11    19
5 Variable5    19    20    11