首页 > 解决方案 > 将函数中的向量排序为另一个向量

问题描述

>nuevos<-(exam[411:510,1])

>  [,1]
401 -0.325087210
402  0.576824342
403  0.314110438
404 -0.710141482
405  0.079179458
406  0.876819478
407 -0.563755647
408 -0.024573542
409  0.072860869
410  0.141759722
411  0.645346837
412 -0.178754696
413 -0.745086021
414  0.741761201
415  1.537360962
416  0.478560270
417 -0.721503050
418 -0.136435690
419 -0.264058207
420  1.851815905
421  0.854542022
422  0.055184071
423  0.214454147
424 -0.374941314
425  0.268580192
426  0.458531169
427  0.440158449
428 -1.539627467
429 -0.146698388
430 -0.174844929

这是我的数据,它是一个矩阵。第一列是 ID,第二列是 X 值。我想选择 10 个 ID。在选择的10个中,5个应该来自unpair number ID,另外5个应该来自ood number ID。10个ID的选择应该是从X值开始起作用的(负值最大的最好)。我想要这样的东西:

ID       X
428 -1.539627467
413 -0.745086021
....

我尝试使用sort(data[data%%2==1])[1:5],但我不明白如何从数据集中提取列 ID,因为这是线性模型的结果,所以 R 给了我位置,但我想使用这个位置和 X 值。请帮我!

谢谢。

标签: r

解决方案


根据我认为您想要做的事情,这是一个工作示例,给出以下数据框:

# generate random input data
data <- data.frame(ID=1:20, X=rnorm(20))

Tidyverse 提供了最干净的解决方案:

require(tidyverse)
data %>%
  arrange(X)

将根据 x 列升序排序。检查文档以获取更多详细信息;您可以做更复杂的事情,例如按组排序、对多列排序(即,指定第一列,并根据连续排序的列打破平局等)。因此,我建议先将您的数据放入数据框中:

data <- data.frame(ID=rownames(nuevos), X=nuevos[,1])

您可以在其中将 ID 替换为您想要的任何内容,然后执行上述操作。添加 adputnuevos获得更具体的反馈。请注意,在不涉及 tidyverse 的情况下,有上百万种方法可以做到这一点(例如,按照您提到的排序);在我看来,tidyverse 只是倾向于打造最干净、最简单的机制(因为它可以与许多其他有用的东西即插即用,例如ggplot,dplyr等),并且确实是习惯于使用数据框的一种很好的思维方式,像这样。


推荐阅读