2014-02-26 68 views
1

我已經將數據幀計算的行和列百分比幾個變量

testA testB testD gen 
Y hi a M 
N lo b F 
P mi c M 
Y no d F 
N hi e M 
P lo f F 
Y mi a M 
N no b F 
P hi c M 
Y lo d F 
N mi e M 
P no f F 

下面我想的幾個變量代理根的百分比。例如,我想要testA與gen和testB V gen。我要完成(簡化的)此爲一些由手變量

row  column    
N 0.3333333  0.5 
Y 0.3333333  0.5  
P 0.3333333  0.5  
hi 0.5   1 
mi 0.5   1 
lo 0.0   0 
no 0.0   0 

爲表中的一個部分(外種皮v GEN)我有此

out.taba=table(test$testA,test$gen) 
    cpa=as.data.frame(prop.table(out.tab, 2)[,2]) 
    rpa=as.data.frame(prop.table(out.tab, 1)[,2]) 

這導致的上部所需的表格,但輸出(變量的響應)按照字母順序排列,按照N,P,Y排序,而我希望輸出爲NYP,而下部分爲hi,mi,lo,no,而不是hi, LO,MI,沒有。

問:如何在不使用手動操作選項的情況下實現表格,包括響應的偏好順序?

我箍人可以幫忙!

回答

1

也許這樣?

df$testA <- factor(df$testA, levels = c("N","Y","P")) 
df$testB <- factor(df$testB, levels = c("hi", "mi", "lo", "no")) 

l <- lapply(df[ , 1:3], function(x){ 
    tab <- table(x, df$gen) 
    rows <- prop.table(tab, 2)[ , 2] 
    cols <- prop.table(tab, 1)[ , 2] 
    cbind(rows, cols) 
    }) 

df2 <- do.call(rbind, l) 
df2 

#   rows cols 
# N 0.3333333 0.5 
# Y 0.3333333 0.5 
# P 0.3333333 0.5 
# hi 0.5000000 1.0 
# mi 0.5000000 1.0 
# lo 0.0000000 0.0 
# no 0.0000000 0.0 
# a 0.3333333 1.0 
# b 0.0000000 0.0 
# c 0.3333333 1.0 
# d 0.0000000 0.0 
# e 0.3333333 1.0 
# f 0.0000000 0.0 
+0

+114秒左右太快對我來說:-) – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto不經常,但...發生;) – Henrik

+0

謝謝@Henrik,準確的爲我想。我只修改了'lapply(df [,c(vars)],function(x)...''我更喜歡這樣,因爲變量在我使用的df中有不同的位置。 – Adam