我有以下数据框
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
手工表格的一部分(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。
问:如何在不使用手动选项的情况下实现表格,包括响应的优先顺序?我箍有人可以帮忙!
答案 0 :(得分: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