2010-07-23 78 views
1

我想对列中的数据进行迭代排序以提取N个最大值。R - 对列中的最大值进行排序和子设置

我的数据是建立在第一和第二列中,包含职业职称和代码,其余所有列包含比较值(在这种情况下,必须事先计算每个城市的位置商数)对于各个城市的职业:

*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 

同时我希望能够重复列明智的(所以我试过很多的顺序排序命令通过直接调用列:数据[,2];只是为了能够运行在整个数据集相同的分析功能。

我一直在plyr搞乱在过去的3天,我觉得我的数据集的设置是不利于PLYER是如何打算使用。

+1

你能澄清一下这个问题吗?这将有助于给我们一个例子,以较小的数据框为输入,并提供一个您想要提取的输出示例。 – chrisamiller 2010-07-23 06:57:13

+0

是的,这很难找出你想要的东西。 – John 2010-07-23 07:13:52

+0

首先,我想获得一个包含两列数据的子集:列“city1”的10个最大值列表,与它们各自的“occ_codes”(来自第一列)相匹配。 这将是一个简单的排序说excel,只有我需要重复操作300次* 10年的数据。 – AzadA 2010-07-23 07:55:15

回答

0

获得我不完全相信你想要的输出根据你的榜样SNIPPIT。这里是你如何能使用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) 
+0

我认为就是这样! – AzadA 2010-07-23 20:52:21

0

一种方法是使用orderddply从包plyr

> 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如果您需要,可以在多列上排序。

0

这将输出每个城市的最大值。类似的结果可以用sortorder

# 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])) 
相关问题