我有一个从文件中读取的数据框: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 个小时,所以我很感激任何帮助。提前致谢。
发帖时最好提供一个实际有效的例子。您提供了输出,但没有提供用于生成该输出的数据,因此无法重新创建您的输出。我将为此示例创建一部分数据(前 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)