2015-10-14 2 views
0

Мне нужно извлечь имена столбцов, соответствующие по меньшей мере 10 значениям для каждой строки фрейма данных, и напечатать их в новом кадре данных. Кто-нибудь может мне помочь?найти имена столбцов, соответствующие наименьшему значению каждой строки в R

моего кадр данных выглядит следующим образом: (15 х 15 матрица)

> head(yt) 
     V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 
    1 0 966 1513 2964 1149 927 1611 1510 390 466 1820 1718 504 1179 
    2 966 0 2410 1520 1817 729 686 290 1823 168 2027 172 1610 1500 
    3 1513 2410 0 604 481 2742 1833 826 214 1618 1712 567 544 1313 
    4 2964 1520 604 0 595 1289 1446 466 1139 430 428 201 452 1574 
    5 1149 1817 481 595 0 494 550 2641 765 934 1813 1516 378 1363 
    6 927 729 2742 1289 494 0 1279 1197 2956 299 888 491 1408 1432 

для каждого из 15 строк, я хотел бы знать имена столбцов для минимумов 10 столбцов

я знаю which.min дает наименьшее имя столбца для каждой строки, но вы можете сообщить мне другие способы вычисления менее 10 значений.

ответ

2

Функция order даст заказ вектора. Таким образом, первое значение его результата соответствует индексу наименьшего значения в векторе. Второй - индекс второго наименьшего и т. Д. Используя его в функции и используя функцию apply, мы можем применить ее ко всем строкам. Результат функции apply - это столбец, который вам, вероятно, не нужен, поэтому транспонирование берется за результат.

first_10 <- function(x) order(x)[1:10] 
t(apply(dat, 1, first_10)) 
+0

Это решает мою проблему. Спасибо edwin – alily

Смежные вопросы