2016-03-30 5 views
1

Я новичок в R. Я хочу, чтобы создать таблицу частот всех фиктивных переменных и у меня есть данные, как этотКак создать таблицу показывает частоту всех фиктивных переменных в г

ID Dummy_2008 Dummy_2009 Dummy_2010 Dummy_2011 Dummy_2012 Dummy_2013 
1 1   1   0   0   1   1 
2 0   0   1   1   0   1 
3 0   0   1   0   0   1 
4 0   1   1   0   0   1 
5 0   0   0   0   1   0 
6 0   0   0   1   0   0 

I хочу видеть, как общую частоту в каждом переменном, как этот

  0 1 sum 
Dummy_2008 5 1 6 
Dummy_2009 4 2 6 
Dummy_2010 3 3 6 
Dummy_2011 4 2 6 
Dummy_2012 4 2 6 
Dummy_2013 2 4 6 

Я знаю только использовать таблицу(), но я могу сделать это только одна переменное время. У меня много временных серьезных фиктивных переменных, и я хочу видеть их тенденцию.

Большое спасибо за помощь Terence

ответ

1

Вот еще один вариант использования mtabulate и addmargins

library(qdapTools) 
addmargins(as.matrix(mtabulate(df1[-1])),2) 
#   0 1 Sum 
#Dummy_2008 5 1 6 
#Dummy_2009 4 2 6 
#Dummy_2010 3 3 6 
#Dummy_2011 4 2 6 
#Dummy_2012 4 2 6 
#Dummy_2013 2 4 6 
+1

Спасибо, что так много. Он работает в один шаг !!!! –

1
result = as.data.frame(t(sapply(dat[,-1], table)))   
result$Sum = rowSums(result) 

      0 1 Sum 
Dummy_2008 5 1 6 
Dummy_2009 4 2 6 
Dummy_2010 3 3 6 
Dummy_2011 4 2 6 
Dummy_2012 4 2 6 
Dummy_2013 2 4 6 

Объяснение:

sapply применяет функцию к каждому столбцу кадра данных и возвращает матрицу. Таким образом, sapply(dat[,-1], table) возвращает матрицу с выходом table для каждого столбца (кроме первого столбца, который мы исключили).

Матрица должна быть перенесена так, чтобы имена столбцов из исходного фрейма данных были строками, а значения фиктивных значений - столбцами, поэтому для этого мы используем функцию t (транспонирование).

Нам нужен кадр данных, а не матрица, поэтому мы обертываем все это в as.data.frame.

Далее, мы хотим, чтобы в другой колонке указывалось общее количество значений, поэтому мы используем функцию rowSums.

+0

Большое вам спасибо за вашу большую помощь. Но он показывает «Ошибка в rowSums (результат):« x »должен быть числовым», я все еще ищу, где не так. –

+0

Ошибка сообщает вам, что хотя бы один из столбцов не является числовым. 'str (result)' покажет вам класс каждого столбца. Я не уверен, почему это произойдет с «таблицей», но трудно сказать больше без дополнительной информации о ваших данных и коде. – eipi10

+0

Большое вам спасибо. Я немного меняю свой код, и я получаю то, что хочу, хотя и без суммы. «result1 = as.data.frame (sapply (dat [, - 1], table)) result1_1 = (t (result1) ([- 3,] [- 4,] [- 5,] [- 6 ,] [- 7,] [- 8,])) результат1_1 " Большое спасибо. ^^ –

Смежные вопросы