我是R noob :)这是我的第一篇文章。
我有一个4k条目的数据集(data
)描述美国州(data$mortality
)的死亡率(data$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”中选择与每个排名死亡率相关联的医院名称 我可以一次为每个州编写一段代码,但想象一下为所有州做这些代码!
答案 0 :(得分: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教程或FAQ中阅读。
答案 1 :(得分: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