Упорядочить вектор в функции на другой вектор - PullRequest
0 голосов
/ 21 января 2020
>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

Это мои данные, это матрица. Первый столбец - это идентификатор, а второй - значение X. Я хочу выбрать 10 ID. Из 10 выбранных 5 должны быть из идентификатора непарного номера, а остальные 5 должны быть из идентификатора номера ood. Выбор 10 ID должен осуществляться в зависимости от значения X (самое отрицательное значение является лучшим). Я хочу получить что-то вроде этого:

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

Я пытался использовать sort(data[data%%2==1])[1:5], но я не понимаю, как я могу извлечь идентификатор столбца из набора данных, потому что это результат линейной модели , поэтому R дают мне позиции, но я хочу работать с этими позициями и значением X. Пожалуйста, помогите мне!

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Исходя из того, что я думаю, вы хотите сделать, вот рабочий пример, учитывая следующий фрейм данных:

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

Tidyverse предлагает самое чистое решение:

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

отсортирует в порядке возрастания в соответствии со столбцом х. Проверьте документацию для организации для получения дополнительной информации; Вы можете выполнять более сложные операции, такие как сортировка по группам, сортировка по нескольким столбцам (ie, указание первого столбца и разрыв связей на основе последовательно отсортированных столбцов и т. д. c). Поэтому я бы порекомендовал сначала поместить ваши данные в фрейм данных:

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

, где вы могли бы заменить идентификатор на то, что вы хотите, а затем выполнить описанное выше. Добавьте dput из nuevos для получения более подробной c обратной связи. Обратите внимание, что под солнцем существует миллион способов сделать это, не прибегая к tidyverse (ie, например, как вы упомянули); На мой взгляд, tidyverse просто создает самый чистый и простой механизм (так как он подключается и играет со многими другими полезными вещами, такими как ggplot, dplyr, et c) и действительно является отличным способом привыкнуть к работе с фреймами данных, такими как этот.

0 голосов
/ 21 января 2020

Числа в первом «столбце» являются именами строк матрицы. Поскольку объекты в вашем вопросе имеют разные имена, мне не совсем понятно, работает ли следующее следующим образом.

Поэтому я бы сделал что-то вроде этого:

df=data.frame(ID=rownames(exam),X=exam[,1])

В противном случае, пожалуйста, опубликуйте вывод dput(exam) или dput(data)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...