2016-01-07 8 views
1

У меня есть двоичное матрицу:Создание таблицы непредвиденных на основе двух столбцов бинарной матрицы

 S1 S2 S3 S4 S5 D1 D2 D3 D4 
obs1 0 0 0 1 0 0 1 0 0 
obs2 0 1 0 0 0 1 0 0 0 
obs3 0 0 1 0 0 0 0 1 0 
obs4 0 0 0 1 0 0 1 0 0 
obs5 0 1 0 0 0 0 1 0 0 
obs6 0 0 0 1 0 0 1 0 0 

Каждая строка матрицы должна содержать значение 1 для группы S (S1, S2, S3, S4 или S5) и значение 1 для группы D (D1, D2, D3 или D4).

Как создать таблицу условий для двух групп на основе двух столбцов двоичной матрицы, где отображается значение 1? т.е., я хотел бы иметь этот формат таблицы:

D1 D2 D3 D4 
S1 0 0 0 0 
S2 1 1 0 0 
S3 0 0 1 0 
S4 0 3 0 0 
S5 0 0 0 0 

Здесь, например, значение 3 поступает из obs1, obs4 и obs6, где пара (S4, D2), принимают Simultaniously 1 в качестве значения.

+0

Не должно ли быть '1' в '(S2, D1) '' от obs2'? – Stibu

+0

Да Я отредактировал вопрос – sdhaoui

+0

Мы продолжаем упускать друг друга ... В целом записи в матрице должны суммироваться до 6, так как есть шесть наблюдений? Или я что-то не понимаю? Итак, теперь '(S2, D1)', кажется, отсутствует. – Stibu

ответ

0

apply вложенную

t(apply(df[2:6], 2, function(x) apply(df[7:10], 2, function(y) sum(x==1 & y ==1)))) 
    D1 D2 D3 D4 
S1 0 0 0 0 
S2 1 1 0 0 
S3 0 0 1 0 
S4 0 3 0 0 
S5 0 0 0 0 
1

Вы можете попробовать:

table(cbind.data.frame(
    S=factor(max.col(x[,1:5]),levels=1:5,labels=paste0("S",1:5)), 
    D=factor(max.col(x[,6:9]),levels=1:4,labels=paste0("D",1:4)) 
)) 
# D 
#S D1 D2 D3 D4 
# S1 0 0 0 0 
# S2 1 1 0 0 
# S3 0 0 1 0 
# S4 0 3 0 0 
# S5 0 0 0 0