2017-01-07 64 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,R2R3與該行匹配。 如果未找到匹配項,則該元素的值爲零。

我附加了目標頻率表的結構。

enter image description here

+0

目前尚不清楚您的預期產出是什麼?圖像中'A'和'B'顯示 – akrun

+0

也許'library(data.table); dcast(setDT(data),R1 + R2 + R3〜C,length)' – 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

我們可以使用dcastdata.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)