Как удалить строки с определенными значениями в (частотной) таблице в R?

С помощью mytable <- table(VarA, varB) я создал таблицу частот, которая выглядит следующим образом:

     1  2
0    0  5
1    5  7
2    0  0
3    7  9
4    0  0
5    5 10

Теперь я хочу запустить некоторую статистику с assocstats и table2d_summary в этой таблице. Но сначала я хочу удалить пустые значения. Это означает, что строки в таблице с нулевым количеством,

Итак, как я могу избавиться от строк с обеими частотами 0 (в моем примере это строки 2 и 4)?

Для фрейма данных я мог бы просто использовать функцию subset:

mytable_noZ <- subset(mytbale, mytable$VarA != 0 & mytable$VarB != 0)

Но не представляется возможным сослаться на переменную (столбец) этим методом в таблице.

Способ, который сработал, - это удаление строк "вручную"

mytable_noZ <- mytable[-c(2,4),]

Что легко в этом примере, но у меня есть несколько больших таблиц.

Я искал решение здесь и в других местах, но всегда находил только способы удаления строк, переменных и наблюдений во фреймах данных.

Так что, надеюсь, кто-то может помочь мне в этом.


person Mobody    schedule 15.01.2018    source источник
comment
Вы можете преобразовать его в data.frame с помощью mytablenew <- as.data.frame.matrix(mytable), а затем выполнить subset, как вы показали.   -  person akrun    schedule 15.01.2018
comment
Спасибо! Это было полезно.   -  person Mobody    schedule 15.01.2018
comment
Я пробовал так, но только с as.data.frame(mytable). Что дало мне фрейм данных с подсчетом случаев. Теперь я застрял в преобразовании моего фрейма данных обратно в таблицу (что необходимо для функции assocstats). Я пытался конвертировать с помощью as.table(mytbalenew). Но он просто говорит, что не может конвертировать.   -  person Mobody    schedule 15.01.2018
comment
другой возможностью было бы удалить уровни из вашего VarA, которые не отображаются в ваших данных. Тогда вы не получите все нулевые строки с самого начала.   -  person scheddy    schedule 15.01.2018
comment
Это тоже идея, но мне кажется, что это более сложный путь. Так как сначала мне нужно выяснить, какие уровни VarA не появляются.   -  person Mobody    schedule 16.01.2018


Ответы (1)


Наконец-то я нашел решение своего вопроса и хочу представить его здесь. На всякий случай, если кто-то еще столкнется с этой проблемой.

Сначала я преобразовал таблицу в data.frame (как предложил akrun):

mydf <- as.data.frame.matrix(mytable)

Затем я выбрал строки для удаления и сохранил их в переменной deleterows и использовал эту переменную для удаления строк из исходной таблицы:

deleterows <- which(mydf$`1` == 0 & mydf$`2` == 0)
mytable <- mytable[-deleterows,]
person Mobody    schedule 17.01.2018