R比例表包括所有N种方式?

时间:2017-04-05 19:59:36

标签: r

我知道这很容易在SAS中完成,但我似乎无法弄清楚如何在R中完成这一切。因此,我试图创建一个包含所有的多路比例表n路。我的意思是 -

我知道如何得到这样的东西(这是一个例子):

prop_table<-as.data.frame(prop.table(table(df$Variable1,df$Variable2),1))   
view(prop_table)

    VariableA VariableB Freq  
    x1         y1        0.5   
    x2         y1        0.75  
    x1         y2        0.5 
    x2         y2        0.25

但我也想要单向比例......就像这样:

VariableA VariableB Freq  
x1                   0.2  
x2                   0.8  
x1         y1        0.5  
x2         y1        0.75  
x1         y2        0.5  
x2         y2        0.25

有没有办法在不单独创建单向,双向... N路表并将它们全部附加的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

我不知道任何可以为你做所有组合的内置函数,但是编写自己的代码行不是太多。这是一个这样的功能

nprop.table <- function(x) {
  tbls <- Map(function(n) {do.call("table", list(bquote(x[,1:.(n), drop=FALSE]), 
      dnn=bquote(names(x)[1:.(n)])) )}, ncol(df):1)
  props <- Map(function(x) as.data.frame(prop.table(x,if(length(dim(x))>1){1} else {numeric(0)})), tbls)
  dplyr::bind_rows(props)
}

我们可以用

运行它
df <- expand.grid(Variable1=c("x1","x2"), Variable2=c("y1","y2"))[rep(1:4, c(10,60,10,20)),]
nprop.table(df)
#   Variable1 Variable2 Freq
# 1        x1        y1 0.50
# 2        x2        y1 0.75
# 3        x1        y2 0.50
# 4        x2        y2 0.25
# 5        x1      <NA> 0.20
# 6        x2      <NA> 0.80

它使用您传入的data.frame的所有列。因此,如果您有三列,它仍然可以正常工作

nsamp <- function(x, n) sample(x, n, replace=T)
df <- data.frame(Var1=nsamp(letters[1:3], 50), 
   Var2=nsamp(letters[4:6], 50), 
   Var3=nsamp(letters[7:8], 50))
nprop.table(df)

答案 1 :(得分:0)

我认为这会让你大部分都在那里:

library(janitor)
library(dplyr) # for the %>% pipe
mtcars %>%
  crosstab(cyl, am) %>%
  adorn_crosstab(denom = "row", show_totals = TRUE) 

#>     cyl          0          1
#> 1     4 27.3%  (3) 72.7%  (8)
#> 2     6 57.1%  (4) 42.9%  (3)
#> 3     8 85.7% (12) 14.3%  (2)
#> 4 Total 59.4% (19) 40.6% (13)

要将其添加到您的双栏表单中,您可以使用添加来自tidyr的gather行:

library(tidyr)
mtcars %>%
  crosstab(cyl, am) %>%
  adorn_crosstab(denom = "row", show_totals = TRUE) %>%
  gather(am, proportion, -cyl)
#>     cyl am proportion
#> 1     4  0 27.3%  (3)
#> 2     6  0 57.1%  (4)
#> 3     8  0 85.7% (12)
#> 4 Total  0 59.4% (19)
#> 5     4  1 72.7%  (8)
#> 6     6  1 42.9%  (3)
#> 7     8  1 14.3%  (2)
#> 8 Total  1 40.6% (13)