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