Как мне отфильтровать функцию table() в R при передаче двух входных данных в таблице (A, B)

#r

#r

Вопрос:

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

Я попробовал что-то вроде

 tbl <-  table(A,B)
tbl[tbl>=10]
 

Но я просто возвращаю частоты без информации о том, что это такое.

Комментарии:

1. каков ваш ожидаемый результат? Мне кажется, что вы не можете просто фильтровать значения в таблице: как бы вы скрыли строку, основываясь на том, какой столбец больше 10?. Тем не менее, вы можете проверить, дает ли это то, что вы хотите: tbl * as.numeric(tbl >= 10) (он сохраняет значения> = 10, «отбрасывая» те, которые меньше.

2. Вы ожидаете, что на table выходе будет фрейм данных, но он больше похож на матрицу. Вы когда-нибудь оценивали, что находится в ваших скобках tbl >= 1 ?

Ответ №1:

Сделайте это так

 tbl <- as.data.frame(table(A, B))
 

Это должно дать вам три столбца data.frame : A , B , Freq которых должно быть достаточно для вашей тепловой карты с кодом, подобным этому образцу рабочего примера

 library(stringi)
library(dplyr)
library(ggplot2)

n <- 10000
A <- stri_rand_shuffle(stri_rand_strings(n, 1, '[a-z]'))
B <- stri_rand_shuffle(stri_rand_strings(n, 1, '[a-z]'))

tbl <- as.data.frame(table(A, B)) %>%
  arrange(A, B) %>%
  filter(Freq >= 10)
ggplot(data = tbl, aes(x = A, y = B, fill = Freq))  
  geom_tile()
 

введите описание изображения здесь