2017-01-07 11 views
1

Я пытаюсь создать частотную таблицу с несколькими столбцами. Мои данныеКак создать частотную таблицу с несколькими столбцами в R?

C = as.factor(sample(LETTERS[1:2], 100, replace = TRUE, prob = c(rep(1/2, 2)))) 
R1 = sample(c(-1, 1), 100, replace = TRUE) 
R2 = sample(c(-1, 1), 100, replace = TRUE) 
R3 = sample(c(-1, 1), 100, replace = TRUE) 
data = data.frame(R1, R2, R3, C) 
rowb = expand.grid(data.frame(r1 = c(-1, 1), r2 = c(-1, 1), r3 = c(-1, 1))) 

Моя цель Частота таблицы является то, что строка содержит комбинацию rowb, а столбец С. В настоящее время R1, R2 и R3 соответствуют строке. Если совпадение не найдено, значение элемента равно нулю.

Прикрепленная структура для таблицы частот целей.

enter image description here

+0

Неясно, каков ваш ожидаемый результат? Что такое «A» и «B» на изображении показано – akrun

+0

Возможно, «библиотека (data.table); dcast (setDT (данные), R1 + R2 + R3 ~ C, длина)' – akrun

+0

Спасибо, akrun! немного неточно ... –

ответ

4

Основываясь на изображении, при условии, что, кажется, вы просто хотите создать новую переменную конкатенации R1-3, а затем пластинчатый его с C; вы могли бы просто использовать paste():

data$comb <- factor(paste(data$R1, data$R2, data$R3), 
# make sure the levels are in the right order: 
        levels = paste(rowb$r1, rowb$r2, rowb$r3)) 

table(data$comb, data$C) 

выход

  A B 
    -1 -1 -1 5 5 
    1 -1 -1 6 4 
    -1 1 -1 6 5 
    1 1 -1 8 10 
    -1 -1 1 7 4 
    1 -1 1 9 5 
    -1 1 1 5 7 
    1 1 1  4 10 
0

Мы можем использовать dcast из data.table и присоединиться к 'rowb'

library(data.table) 
dcast(setDT(data), R1+R2+R3~C, length)[rowb, on = .(R1=r1, R2 = r2, R3 = r3)] 

Или объединение первого и затем dcast

dcast(setDT(data)[rowb , on = .(R1=r1, R2 = r2, R3 = r3)], ...~C)