更改 prop.table() 的输出

wat*_*wer 0 sorting layout r

我有一个从文件中读取的数据框:sassign。我使用 prop.table() 创建了一个频率表。这是我使用的:

prop.table(table(sassign$state))
Run Code Online (Sandbox Code Playgroud)

输出是:

    AE      CT      DC      DE      MA      MD      ME      NH      NJ      NY      PA      RI      VA      VI      VT 
0.00010 0.05024 0.00678 0.01422 0.08504 0.08344 0.00686 0.01330 0.22136 0.33060 0.17436 0.00804 0.00054 0.00090 0.00422 
Run Code Online (Sandbox Code Playgroud)

这个输出非常笨拙。有什么方法可以将其组织为一列,包括出现次数,然后对其进行排序?

我也尝试过 CrossTabs,但它更笨重。

CrossTable(sassign$state)

  Cell Contents
|-------------------------|
|                       N |
|         N / Table Total |
|-------------------------|


Total Observations in Table:  50000 


          |        AE |        CT |        DC |        DE |        MA | 
          |-----------|-----------|-----------|-----------|-----------|
          |         5 |      2512 |       339 |       711 |      4252 | 
          |     0.000 |     0.050 |     0.007 |     0.014 |     0.085 | 
          |-----------|-----------|-----------|-----------|-----------|


          |        MD |        ME |        NH |        NJ |        NY | 
          |-----------|-----------|-----------|-----------|-----------|
          |      4172 |       343 |       665 |     11068 |     16530 | 
          |     0.083 |     0.007 |     0.013 |     0.221 |     0.331 | 
          |-----------|-----------|-----------|-----------|-----------|


          |        PA |        RI |        VA |        VI |        VT | 
          |-----------|-----------|-----------|-----------|-----------|
          |      8718 |       402 |        27 |        45 |       211 | 
          |     0.174 |     0.008 |     0.001 |     0.001 |     0.004 | 
          |-----------|-----------|-----------|-----------|-----------|
Run Code Online (Sandbox Code Playgroud)

我是一名初学者,过去 4 天开始使用 R。我在这个问题上花了大约 4 个小时,所以我很感激任何帮助。提前致谢。

mrb*_*ich 5

发帖时最好提供一个实际有效的例子。您提供了输出,但没有提供用于生成该输出的数据,因此无法重新创建您的输出。我将为此示例创建一部分数据(前 4 个状态):

state <- c(rep("AE", 5), rep("CT", 2512), rep("DC", 339), rep("DE", 711))
Run Code Online (Sandbox Code Playgroud)

现在,您应该将结果保存prop.table()在一个对象中,以便您可以继续使用它。

tab <- prop.table(table(state))
Run Code Online (Sandbox Code Playgroud)

然后您可能想要创建一个,data.frame其中状态作为一列,比例作为另一列,如下所示:

df <- data.frame(state=names(tab), proportion=as.numeric(tab))
Run Code Online (Sandbox Code Playgroud)

现在的内容df是:

  state  proportion
1    AE 0.001401738
2    CT 0.704233249
3    DC 0.095037847
4    DE 0.199327166
Run Code Online (Sandbox Code Playgroud)

如果您还想按比例对行进行排序,那么您可以这样做

df <- df[order(df$proportion),]
Run Code Online (Sandbox Code Playgroud)

  • @watchtower [请参阅此处](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)以获取对未来帖子的一些指导 (2认同)
  • 你可以稍微简化一下 `as.data.frame(tab)` (2认同)