ftable
создает «плоские» таблицы сопряженности [по] ... переупорядочивая данные в виде [2D] матрицы.Итак, просто используйте as.matrix
для преобразования данных в матрицу перед поднабором (если вы используете as.table
напрямую, данные возвращаются в структуру с более высокой размерностью).
# Create flat contingency table with column margin and variable names
table1 <- ftable(addmargins(table(Group1 = df1$Group1,
Group2 = df1$Group2,
Year = df1$Year), margin=3))
# Convert to matrix
mat1 <- as.matrix(table1)
mat2 <- mat1[mat1[ ,4] > 2, ]
mat2
> mat2
Year
Group1_Group2 2010 2011 2012 Sum
A_b 3 0 0 3
A_c 0 2 3 5
B_b 2 0 1 3
Если вы действительно этого не делаетекак "_", затем замените, используя gsub
.
dimnames(mat2) <- rapply(dimnames(mat2), gsub, pattern = "_", replacement = " ", how = "replace")
Редактировать
Или, альтернативно, использовать пакеты dplyr
и tidyr
для гибкости и удобочитаемости кода:
library(dplyr)
library(tidyr)
df1 %>%
group_by(Group1, Group2, Year) %>%
tally() %>%
spread(Year, n, fill = 0) %>%
ungroup() %>%
mutate(Sum = rowSums(.[-(1:2)])) %>%
filter(Sum > 2) %>%
unite(Name, c(Group1, Group2), sep = " ")
Source: local data frame [5 x 5]
Name 2010 2011 2012 Sum
(chr) (dbl) (dbl) (dbl) (dbl)
1 A a 2 1 0 3
2 A b 1 1 1 3
3 B b 2 0 2 4
4 B c 1 2 0 3
5 C a 1 2 0 3