2013-02-27 96 views
0

我仍然在努力应对不同的应用功能,以及它们如何取代一个for-next-loop。我想要做的是按照排序的值顺序排序带有字符串(值标签)的矢量,在我的情况下比值比。如何使用apply函数和apply-family的函数?

我有“oo”对象的优势比(无序)和so对象中的排序/排序赔率值。此外,我有相同的顺序进行排序为“OO”值标签,现在应重新orderd于“因此”对象中的值匹配:

# sort labels descending in order of 
# odds ratio values 
oo <- exp(coef(x))[-1] 
so <- sort(exp(coef(x))[-1]) 
nlab <- NULL 
for (k in 1:length(categoryLabels)) { 
    nlab <- c(nlab, categoryLabels[which(so[k]==oo)]) 
} 
categoryLabels <- nlab 

例如

  • “OO” 是(0.3,0.7,0.5)
  • “所以” 是(0.3,0.5,0.7)
  • categoryLabels(的OO)是( “A”, “B”,“ (“A”,“C”,“B”)重新排序

我想知道的是,如果可以替换for-next通过应用功能进行循环,如果是这样,怎么办?

由于提前, 丹尼尔

+0

'categoryLabels'元素与'oo'元素的起始顺序是否相同?如果是这样,'ord < - order(00)'后跟'so < - oo [ord]'和'categoryLabels < - categoryLabels [ord]'应该这样做。更好的办法是将'oo'变成一个名为* vector的矢量,并将'names'属性设置为'categoryLabels',然后对'oo'进行排序。当然,这就是我在这个评论的第一句话中询问的假设。 “ – 2013-02-27 15:30:56

+0

”categoryLabels元素与oo元素的起始顺序相同吗?“ - 是的,“oo”是包含OR值的“原始赔率”,并且分类标签与这些OR相关(即相同的“无序”订单)。 “所以”应该是“排序的赔率”。订单功能工作正常,我使用了David提出的实现。 – Daniel 2013-02-28 08:51:33

回答

2

它看起来像所有你想要做的是基于oo为了categoryLabels,这可能与做:

categoryLabels = categoryLabels[order(oo)] 

order给你的矢量当用于索引向量时,会将其转换为排序顺序。在您的例子:

oo = c(0.3, 0.7, 0.5) 
order(oo) 
# [1] 1 3 2 

但如果我们没有与sooo,比在这种情况下,使用任何apply功能更容易开始将使用match

categoryLabels = categoryLabels[match(oo, so)] 

match是找到一个函数第二个向量中第一个向量的索引。在你的例子中:

oo = c(0.3, 0.7, 0.5) 
so = c(0.3, 0.5, 0.7) 
match(oo, so) 
# [1] 1 3 2 
+0

谢谢大卫!正常工作,我再次深入到R语法和编码! – Daniel 2013-02-28 08:48:26

相关问题