Создавайте лучшие таблицы частот в R

Вот некоторые данные:

dta <- data.frame(
  id = 1:10, 
  code1 = as.factor(sample(c("male", "female"), 10, replace = TRUE)),
  code2 = as.factor(sample(c("yes", "no", "maybe"), 10, replace = TRUE)),
  code3 = as.factor(sample(c("yes", "no"), 10, replace = TRUE))
)

Я хотел бы красиво отформатированную таблицу частот для кодовых переменных.

codes <- c("code1", "code2", "code3")

Например, мы можем запустить встроенную команду table.

> sapply(dta[, codes], table)
$code1

female   male 
     4      6 

$code2

maybe    no   yes 
    5     2     3 

$code3

 no yes 
  4   6 

Вся информация здесь, но было бы неплохо иметь таблицу таким образом:

library(plyr)
ddply(dta, .(code1), summarize, n1 = length(code1))
   code1 n1
1 female  4
2   male  6

И это трижды. Могут быть отдельные кадры данных или все в одном.

Как мы можем перебрать переменные? Или любые другие подходы.


person Rico    schedule 13.03.2014    source источник
comment
cran.r-project.org/web/packages/sjPlot/index. html   -  person aatrujillob    schedule 13.03.2014
comment
Да, я забыл про sjPlot   -  person Rico    schedule 13.03.2014


Ответы (2)


Вы можете использовать lapply с as.data.frame(table)

codes <- c("code1", "code2", "code3")
tbl<-lapply(dta[, codes], as.data.frame(table))

Что даст вам:

tbl
$code1
  value.Var1 value.Freq
1     female          6
2       male          4

$code2
  value.Var1 value.Freq
1      maybe          4
2         no          5
3        yes          1

$code3
  value.Var1 value.Freq
1         no          4
2        yes          6

Таким образом, вы можете получить доступ к каждому фрейму данных с помощью tbl$code1, tbl$code2 и так далее. Например:

tbl$code1
  value.Var1 value.Freq
1     female          6
2       male          4
person Carlos Cinelli    schedule 13.03.2014

Эта работа (общая в том смысле, что она не требует предварительного знания «кодов»)?

library(plyr)
library(reshape)

dta <- data.frame(
  id = 1:10, 
  code1 = as.factor(sample(c("male", "female"), 10, replace = TRUE)),
  code2 = as.factor(sample(c("yes", "no", "maybe"), 10, replace = TRUE)),
  code3 = as.factor(sample(c("yes", "no"), 10, replace = TRUE))
)

d1 <- melt(dta, "id")

d2 <- count(d1, .(variable, value))

d3 <- by(d2, d2$variable, function(x) {
  v <- as.character(x[1,]$variable)
  y <- x[,2:3]
  colnames(y) <- c(v, "n1")
  return(y)
})

d3 

## d2$variable: code1
##    code1 n1
## 1 female  6
## 2   male  4
## ----------------------------------------------------------------------- 
## d2$variable: code2
##   code2 n1
## 3 maybe  2
## 4    no  5
## 5   yes  3
## ----------------------------------------------------------------------- 
## d2$variable: code3
##   code3 n1
## 6    no  4
## 7   yes  6
person hrbrmstr    schedule 13.03.2014