Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为多个变量计算的行和列百分比_R - Fatal编程技术网

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秒,没有结果,除了沮丧:)