Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting R-列中的排序和子设置最大值_Sorting_R_Subset - Fatal编程技术网

Sorting R-列中的排序和子设置最大值

Sorting R-列中的排序和子设置最大值,sorting,r,subset,Sorting,R,Subset,我尝试对列中的数据进行迭代排序,以提取N个最大值 我的数据设置为第一列和第二列,其中包含职业名称和代码,其余所有列都包含比较值(在本例中为各个城市的职业计算的位置商): *occ_code city1 ... city300* occ1 5 ... 7 occ2 20 ... 22 . . . . . . . .

我尝试对列中的数据进行迭代排序,以提取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打交道,我觉得我的数据集的设置对plyr的使用方式没有好处。

一种方法是使用plyr软件包中的ddply命令


如果需要,order可以在多个列上排序。

这将输出每个城市的最大值。使用sort或order可以获得类似的结果


根据您的示例snippit,我不太确定您想要的输出是什么。以下是如何使用plyr和重塑为每个城市获得这样的数据帧

我不知道您将如何处理这些数据,但您可能希望将其恢复为数据帧格式

df.cities.max <- adply(a.cities.max, 1)

你能澄清一下这个问题吗?这将有助于给我们一个以较小的数据帧作为输入的示例,以及一个您想要提取的输出示例。是的,很难弄清楚您想要的是什么。首先,我想得到一个包含两列数据的子集:一个列city1的10个最大值的列表,与第一列中各自的occ_代码相匹配。这将是一个足够简单的排序在说excel,只是我需要重复操作300倍*10年的数据。
# 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]))
#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$X13
df.cities.max <- adply(a.cities.max, 1)