2

我是 R 菜鸟 :) 这是我的第一篇文章。我有一个包含 4k 个条目()的数据集,描述了美国各州( )的data死亡率( )。data$mortalitydata$state

我想按州名称循环遍历死亡率,例如循环遍历所有死亡率,"AK" 如下所示:

tbl <- table (data$State) ## table with frequency for entries at each state 

如何循环遍历每个状态的所有出现?

我不想指定州名。我想对所有状态进行排序,然后按名称循环遍历它们: "AK""AL"...

例如,我的表是:

State   mortality 
AL  14.3
AL  18.5
AL  18.1
AL  NA
AL  NA
AK  NA
AK  17.7
AK  18
AK  15.9
AK  NA
AK  19.6
AK  17.3
AZ  15
AZ  17.1
AZ  17.1
AZ  NA
AZ  16.4
AZ  15.2
AZ  16.7

然后,我可以遍历“AL”中的所有比率并对它们进行排名,然后选择与“AL”中每个排名死亡率相关的医院名称。我可以一次为每个州编写一段代码,但想象一下对所有州都这样做!

4

2 回答 2

2

这是一个 data.table 解决方案,如评论中所建议:

require(data.table)
DT <- data.table(hospID=1:nrow(data),data)
DT[,r:=rank(mortality,na.last='keep'),by=State]

然后运行DT看看结果:

    hospID State mortality   r
 1:      1    AL      14.3 1.0
 2:      2    AL      18.5 3.0
 3:      3    AL      18.1 2.0
 4:      4    AL        NA  NA
 5:      5    AL        NA  NA
 6:      6    AK        NA  NA
 7:      7    AK      17.7 3.0
 8:      8    AK      18.0 4.0
 9:      9    AK      15.9 1.0
10:     10    AK        NA  NA
11:     11    AK      19.6 5.0
12:     12    AK      17.3 2.0
13:     13    AZ      15.0 1.0
14:     14    AZ      17.1 5.5
15:     15    AZ      17.1 5.5
16:     16    AZ        NA  NA
17:     17    AZ      16.4 3.0
18:     18    AZ      15.2 2.0

看看?rank处理关系和NA价值观的不同方式。

如果要按排名排序,可以使用DT[order(State,r)]. data.table 包还允许一个键——一个列向量,data.table 在该列上自动排序。设置密钥还有其他好处,您可以在 data.table 教程或常见问题解答中阅读。

于 2013-10-10T14:27:04.113 回答
0

按 col 'a' 排序:

x = data.frame(a = sample(LETTERS, 10), b = runif(10))
x = x[order(x[, 'a']), ]
print(x)

4  B 0.8030872
9  C 0.3754850
7  D 0.8670409
5  G 0.1278583
3  J 0.9161972
6  N 0.7159080
8  R 0.5340525
2  S 0.2903496
10 T 0.5466612
1  V 0.9187505
于 2013-10-10T14:25:23.930 回答