2

私はR初心者です:)これが私の最初の投稿です。米国の州 ( ) ごとのdata死亡率 ( ) を記述した 4,000 件のエントリ ( ) のデータセットがあります。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 チュートリアルまたは FAQ を参照してください。

于 2013-10-10T14:27:04.113 に答える
0

列「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 に答える