计算多个变量的行和列百分比

  • 本文关键字:百分比 变量 计算 r
  • 更新时间 :
  • 英文 :


我有以下数据框

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

我想要几个变量代理生成的百分比。例如,我想要测试A与生成和测试B V生成。我想为许多变量完成(简化)此操作

    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

手工为桌子的一部分(testA 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,no。

问:如何在不使用手动选项的情况下实现表格,包括响应的首选顺序?

我箍有人可以帮忙!

也许是这样的?

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

最新更新