#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()