2013-11-14 2 views
1

У меня есть кадр данных в следующем формате, и я хочу, чтобы получить кросс табулирования таблицы:Как не понижать уровни факторов в R таблицах с таблицами?

T1 T2 
NN NF 
FF FF 
NF FF 
NN NN 
NN FF 
NF NF 
NF NF 
FF FF 

я могу создать простую кросс-таблицу табуляции с помощью таблицы функции()

таблицы (T1, T2) Который дает мне следующий вывод:

FF FN NF NN 
FF 2 0 0 0 
FN 0 0 0 0 
NF 1 0 2 0 

Однако уровень фактора NN отбрасывается по умолчанию. Есть ли способ сохранить уровень NN в таблице. Какой будет таблица вывода выглядеть:

FF FN NF NN 
FF 2 0 0 0 
FN 0 0 0 0 
NF 1 0 2 0 
NN 0 0 0 0 

редактировать:

dput(dataframe) gives: 

    structure(list(T1 = structure(c(3L, 1L, 2L, 3L, 3L, 2L), .Label = c("FF", 
    "NF", "NN"), class = "factor"), T2 = structure(c(2L, 1L, 1L, 
    3L, 1L, 2L), .Label = c("FF", "NF", "NN"), class = "factor")), .Names = c("T1", 
    "T2"), row.names = c(NA, 6L), class = "data.frame") 
+1

Пожалуйста, покажите нам 'dput (head (.))' Вашего фрейма данных. –

+0

Что такое 'class (T1)' и 'class (T2)'? Я думаю, что 'table' не понижает уровни, если не указано значение' exclude'. –

+0

@BlueMagister, я добавил dput() в изменениях – Arihant

ответ

2

Проблема заключается в том, что «FN» нет в списке входных данных. Вы можете обойти это, позвонив levels() и сообщив R, что один из ваших уровней, это только уровень, который не имеет никаких наблюдений в вашем наборе данных. Например,

dframe <- read.table(text=" T1 T2 
NN NF 
FF FF 
NF FF 
NN NN 
NN FF 
NF NF 
NF NF 
FF FF", header=T) 

levels(dframe$T1) <- c("FF", "NF", "NN", "FN") 
levels(dframe$T2) <- c("FF", "NF", "NN", "FN") 
with(dframe, table(T1,T2)) 
    T2 
T1 FF NF NN FN 
    FF 2 0 0 0 
    NF 1 2 0 0 
    NN 1 1 1 0 
    FN 0 0 0 0 

Один особо отметить: вы перезаписать исходные уровни здесь, так что вам нужно поставить новый, несуществующий, уровень последний, в противном случае R будет вызывать «NF» уровень «FN» и приводят ко всем видам проблем.

+0

спасибо! это не первый раз, когда я попал в беду. – Arihant

+1

Добро пожаловать, @Arihant; они сложны. Будьте осторожны с «специальным примечанием», которое я добавил в конце. Вы можете сначала называть «уровни (T1)» (и т. Д.) * Сначала * перед изменением уровней, чтобы вы могли визуально их осмотреть и убедиться, что вы случайно не изменили то, что вы не хотели. – gung

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