рассчитать частоту в R

Вот мои данные

> a
 [1] Male   Male   Female Male   Male   Male   Female Female Male   Male   Female Male   Male   Male  
[15] Female Female Female Male   Female Male   Female Male   Male   Female Male   Male   Female Male  
[29] Male   Male   Female Male   Male   Male   Female Female Male   Male   Male   Male   Male  
Levels:  Female Male

> b
[1] 0 1 0 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 1 1 1
Levels: 0 1

> table(a,b)
        b
a         0  1
          0  0
  Female 10  4
  Male   12 15

Я не знаю, почему результат table(a,b) имеет строку (0 0), мой ожидаемый результат выглядит следующим образом:

> table(a,b)
        b
a         0  1
  Female 10  4
  Male   12 15

Не могли бы вы сказать мне, почему это происходит и как это исправить, спасибо!

> dput(a)
structure(c(3L, 3L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L, 2L, 3L, 3L, 
3L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 
3L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L, 3L, 3L, 3L), .Label = c("", 
"Female", "Male"), class = "factor")

> dput(b)
structure(c(1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L), .Label = c("0", 
"1"), class = "factor")

person lightsnail    schedule 05.07.2016    source источник
comment
Длина a и b одинакова?   -  person Psidom    schedule 06.07.2016
comment
у вас могут быть пустые уровни т.е. "". Попробуйте nlevels(a)   -  person user20650    schedule 06.07.2016
comment
@Psidom да, длина a и b одинакова   -  person lightsnail    schedule 06.07.2016
comment
Основываясь на дополнительном пространстве в Levels:__Female Male, я думаю, @user20650 прав. Если бы было только два уровня, это был бы Levels:_Female Male (только один пробел, символы подчеркивания — это пробелы).   -  person r2evans    schedule 06.07.2016
comment
Как отмечалось выше, у вас может быть пустая строка в вашем векторе a. Проверь это.   -  person Psidom    schedule 06.07.2016
comment
@Псидом; это может быть не пустая строка, а дополнительный уровень   -  person user20650    schedule 06.07.2016
comment
По сути, та же проблема, что и здесь: "> stackoverflow.com/questions/32981564/   -  person thelatemail    schedule 06.07.2016
comment
@ user20650 Да, ты понял. Там есть дополнительный уровень.   -  person Psidom    schedule 06.07.2016
comment
Как видите, у вас есть три уровня (.Label) в вашем dput. Устраните проблему с вводом данных, и вы исправите таблицу. (Или просто переназначить уровни с помощью, как ни странно, levels(a) <- c("Female", "Male").)   -  person r2evans    schedule 06.07.2016
comment
Или используйте команду droplevels: a<-droplevels(a)   -  person Dave2e    schedule 06.07.2016
comment
Спасибо всем вам! @user20650 @Gregor @r2evans @Psidom Исходные данные находятся в формате .csv, затем я использовал read.csv("mydata.csv", header=T) для чтения данных. И список a — это всего лишь один столбец фрейма входных данных, я использовал dataframe$a для извлечения этого столбца, и в этом столбце нет пробелов, немного странно. Как появился " " уровень?   -  person lightsnail    schedule 06.07.2016
comment
Это будет работать с данными примера: table(as.character(a), b, useNA="no"). Факторы всегда немного странные. Я всегда стараюсь использовать as=TRUE в своем семействе функций read., которые преобразуют переменные в символы, а не в множители.   -  person lmo    schedule 06.07.2016
comment
@ Имо Да, это работает. Благодарю вас!   -  person lightsnail    schedule 06.07.2016


Ответы (1)


Из комментариев выше:

Это происходит из-за того, что в a есть пустой факторный уровень:

> levels(a)
[1] ""       "Female" "Male" 

Вы можете создать таблицу, которая игнорирует пустые уровни факторов (из комментария @lmo):

table(as.character(a), b)

В качестве альтернативы вы можете легко удалить уровни факторов без наблюдений (из комментария @Dave2e)

a <- droplevels(a)
table(a, b)
person KenHBS    schedule 21.08.2016