使用%of Factor创建数据框

时间:2016-05-07 08:54:38

标签: r

我有一个数据框,显示了许多经过健康和安全测试的商店。在这个数据框中,我有商店的名称和显示某一天测试结果的因素。

head(facttab)
    new_table.dba_name new_table.results
1            QUICK SUB   Out of Business
2             BAR BARI              Pass
3   FOOD FIRST CHICAGO              Pass
4   TRATTORIA ISABELLA              Pass
5    DELI-TIME, L.L.C.              Pass
6 GREAT AMERICAN BAGEL              Fail
>    

 facttab <- data.frame(new_table$dba_name, new_table$results)
    head(table(facttab))

new_table.dba_name                Fail No Entry Not Ready Out of Business Pass Pass w/ Conditions
  1 2 3 EXPRESS                      1        0         0               0    0                  0
  1155 CAFETERIA                     0        0         0               0    1                  0
  16TH ST FOOD MART                  0        0         0               1    0                  0
  194  RIB  JOYNT                    0        1         0               0    0                  0
  24HR MINI MART & CELLAR FOR YOU    1        0         0               0    0                  0
  7-ELEVEN                           0        0         0               0    4                  2

我想构建另一个表或数据框,显示整个数据框中每个商店的测试总结果的百分比,这样我就可以看到谁拥有最大的%失败和最大的%传递。

结果表与上面类似,例如7-Eleven将是 - 0%,No Entry - 0%,Not Ready Out - 0%,Out of Business 0%,Pass - 66%和Pass w /条件 - 33%。

1 个答案:

答案 0 :(得分:0)

我以为我会回答一下。这是将prop.table转换为data.frame的方法。我相信这可能是一种更快捷的方式。请注意,我正在使用自己创建的数据集。查看?reshape

可能会有所帮助
set.seed(123)
#create some dummy data
df <- data.frame(store = sample(c('a','b','c'), 100, replace = T),
                 status = sample(c('foo','bar','haz'), 100, replace = T))
#convert to prop.table
(prop.t <- prop.table(table(df$store, df$status), 1))

          bar       foo       haz
  a 0.4242424 0.2121212 0.3636364
  b 0.4117647 0.4117647 0.1764706
  c 0.3636364 0.3030303 0.3333333

#coerce to data.frame
(prop.t.df <- data.frame(prop.t))

  Var1 Var2      Freq
1    a  bar 0.4242424
2    b  bar 0.4117647
3    c  bar 0.3636364
4    a  foo 0.2121212
5    b  foo 0.4117647
6    c  foo 0.3030303
7    a  haz 0.3636364
8    b  haz 0.1764706
9    c  haz 0.3333333

#use reshape()
(reshape(prop.t.df, direction = 'wide', idvar = 'Var1', v.names = 'Freq', timevar = 'Var2'))

  Var1  Freq.bar  Freq.foo  Freq.haz
1    a 0.4242424 0.2121212 0.3636364
2    b 0.4117647 0.4117647 0.1764706
3    c 0.3636364 0.3030303 0.3333333

显然,你可能想稍微使用这些名字,但这是达到你想要的一种方式。

PS 另一种解决方法是:

prop.t.df2 = as.data.frame.matrix(prop.t)

注意:您可能需要访问Store的{​​{1}}来创建名为row.names的新列。

prop.t.df2