1

N 個の最大値を抽出するために、列内のデータを繰り返し並べ替えようとしています。

私のデータは、1 番目と 2 番目の列に職業のタイトルとコードが含まれており、残りのすべての列には、さまざまな都市の職業の比較値 (この場合、都市ごとに事前に計算する必要があった場所の商) が含まれています。 :

    *occ_code  city1  ...   city300*
     occ1      5      ...    7
     occ2      20     ...   22
     .         .       .     .
     .         .       .     .
     occ800    20     ...   25

最大値で並べ替えたい都市ごとに、それぞれの職業と肩書きに一致する最大値のサブセットを選択します。比較的些細なことだと思っていたのですが…

明確化のために編集:分析のためにソートされたデータのサブセットで終了したい。

     occ_code   city1
     occ200     10
     occ90      8
     occ20      2
     occ95      1.5

同時に、並べ替えを列単位で繰り返すことができるようにしたい (そのため、列を直接呼び出すことで多くの順序コマンドを試しました: data[,2]; だけで、同じ分析関数を全体で実行できるようになりますデータセット。

私は過去 3 日間 plyr をいじっていましたが、データセットのセットアップが plyer の本来の使用方法を助長していないように感じます。

4

3 に答える 3

0

これにより、各都市の最大値が出力されます。sortまたはを使用して同様の結果を得ることができます。order

# Generate some fake data
codes <- paste("Code", 1:100, sep="")
values <- matrix(0, ncol=20, nrow=100)
for (i in 1:20)
    values[,i] <- sample(0:100, 100, replace=T)

df <- data.frame(codes, values)

names(df) <- c("Code", paste("City", 1:20, sep=""))

# Now for each city we get the maximum
maxval <- apply(df[2:21], 2, which.max)
# Output the max for each city
print(cbind(paste("City", 1:20), codes[maxval]))
于 2010-07-23T07:06:57.540 に答える
0

あなたの例のスニピットによると、あなたが望む出力が何であるか正確にはわかりません。plyrとを使用して、すべての都市に対してそのようなデータフレームを取得する方法は次のとおりですreshape

#using the same df from nico's answer
library(reshape)
df.m <- melt(df, id = 1)
a.cities <- cast(df.m, codes ~ . | variable)

library(plyr)
a.cities.max <- aaply(a.cities, 1, function(x) arrange(x, desc(`(all)`))[1:4,])

a.cities.maxはデータ フレームの配列で、各データ フレームの各都市の 4 つの最大値を含みます。これらのデータ フレームの 1 つを取得するには、次のようにインデックスを付けることができます。

a.cities.max$X13

このデータで何をするのか正確にはわかりませんが、データ フレーム形式に戻したいと思うかもしれません。

df.cities.max <- adply(a.cities.max, 1)
于 2010-07-23T16:47:09.533 に答える
0

1つの方法は、パッケージから使用orderすることですddplyplyr

> library(plyr)
> d<-data.frame(occu=rep(letters[1:5],2),city=rep(c('A','B'),each=5),val=1:10)
> ddply(d,.(city),function(x) x[order(x$val,decreasing=TRUE)[1:3],])

order必要に応じて、複数の列で並べ替えることができます。

于 2010-07-23T06:56:12.950 に答える