1

我正在尝试对列中的数据进行迭代排序以提取 N 个最大值。

我的数据设置为包含职业名称和代码的第一列和第二列,其余所有列包含各个城市的这些职业的比较值(在这种情况下,必须预先为每个城市计算的位置商) :

    *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

一种方法是使用orderwith ddplyfrom the packageplyr

> 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 回答
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

根据您的示例代码段,我不确定您想要的输出是什么。以下是如何为每个使用plyrreshape

#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 个最大值。要获取这些数据帧之一,您可以使用

a.cities.max$X13

我不知道您将如何处理这些数据,但您可能希望它以数据框格式返回。

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