2016-05-29 44 views
2

有沒有什麼簡單的方法可以製作一個這樣的R表格: 1.表中的值是每行的百分比。 2.除以兩組以上。 例如,該數據是簡單的方法爲具有兩個以上組的離散數據製作百分比表?

Success Gender Level 
1  M High 
1  M Low 
1  F Med 
0  M Low 
0  M Med 
0  F High 

所需的表看起來像這樣

    Success=1        Success=0 
     Level=High Level=Med Level=Low  Level=High Level=Med Level=Low 
Gender=F 0   0.5   0    0.5   0   0 
Gender=M 0.25  0   0.25   0    0.25  0.25 

回答

3

您可以使用ftable()prop.table()。指定row.vars作爲第二列將產生一個看起來像你想要的表格的表格(順序略有不同)。

prop.table(ftable(df, row.vars = 2), margin = 1) 
#  Success 0    1   
#  Level High Low Med High Low Med 
# Gender          
# F    0.50 0.00 0.00 0.00 0.00 0.50 
# M    0.00 0.25 0.25 0.25 0.25 0.00 

對於確切需要的表,您可以重構列以更改級別的順序。

df2 <- transform(
    df, 
    Level = factor(Level, levels = c("High", "Med", "Low")), 
    Success = factor(Success, levels = 1:0) 
) 

prop.table(ftable(df2, row.vars = 2), margin = 1) 
#  Success 1    0   
#  Level High Med Low High Med Low 
# Gender          
# F    0.00 0.50 0.00 0.50 0.00 0.00 
# M    0.25 0.00 0.25 0.00 0.25 0.25 

數據:

df <- structure(list(Success = c(1L, 1L, 1L, 0L, 0L, 0L), Gender = structure(c(2L, 
2L, 1L, 2L, 2L, 1L), .Label = c("F", "M"), class = "factor"), 
    Level = structure(c(1L, 2L, 3L, 2L, 3L, 1L), .Label = c("High", 
    "Low", "Med"), class = "factor")), .Names = c("Success", 
"Gender", "Level"), class = "data.frame", row.names = c(NA, -6L 
)) 
+0

感謝。這十分完美!我仍然更喜歡使用'with()'函數的第一個版本。雖然看起來有點不同,但它給了我選擇變量名稱的控制權。考慮到我正在處理更大的數據集,它會很方便。謝謝! –

+1

謝謝你所有的詳細解答。 –

+0

當然大衛,高興地幫助:) –

相關問題