R 为多个变量计算的行和列百分比
我有以下数据框R 为多个变量计算的行和列百分比,r,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 我想要几个变量的百分比。例如,我想要testA对gen和testB对gen。我想要为许多变
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对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
Q:如何在不使用手动选项的情况下实现表格,包括响应的首选顺序
我希望有人能帮忙 也许是这样的
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
df$testA@AnandaMahto并不经常发生…;)谢谢你@Henrik,正是我想要的。我只修改了lappy(df[,c(vars)],函数(x)我更喜欢这样,因为变量在我使用的df中有不同的位置。很高兴提供帮助!我同意你的修改-变量名称比硬编码列位置好得多。114秒太快@Ananda Mahto hmmm花费了我144400秒,没有结果,除了沮丧:)