我有一个数据框,显示了许多经过健康和安全测试的商店。在这个数据框中,我有商店的名称和显示某一天测试结果的因素。
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%。
答案 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