我有几个分类变量,值从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)。
答案 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