Как убрать строки матрицы по имени строки, а не по числовому индексу?
46411 просмотра
3 ответа
У меня матрица г :
> g[1:5,1:5]
rs7510853 rs10154488 rs12159982 rs2844887 rs2844888
NA06985 "CC" "CC" "CC" "CC" "CC"
NA06991 "CC" "CC" "CC" "CC" "CC"
NA06993 "CC" "CC" "CC" "CC" "CC"
NA06994 "CC" "CC" "CC" "CC" "CC"
NA07000 "CC" "CC" "CC" "CC" "CC"
> rownames(g)[1:2]->remove
> remove
[1] "NA06985" "NA06991"
> g[-remove,]
Ошибка в -remove: неверный аргумент для унарного оператора
Есть ли простой способ сделать то, что я хочу сделать здесь (удалить идентификатор, указанный в векторе «удалить» из матрицы g ?
Примечание: это просто модель того, что я на самом деле хочу сделать, пожалуйста, не говорите, просто делайте g[-(1:2), ]
, мне нужно иметь возможность удалить целую кучу строк, которые у меня есть ID-d.
Ответы (3)
61 плюса
При работе с индексированием нельзя использовать «отрицательные» символьные векторы. Вы можете преобразовать в логическое с% в%
g[!rownames(g) %in% remove, ]
Если вы действительно хотите использовать отрицательную индексацию, это можно сделать:
g[-which(rownames(g) %in% remove), ]
... однако он имеет неприятный потенциальный ошибочный результат, который возникает, когда в целевом векторе нет имен строк. Результатом может быть отсутствие возвращаемых значений.
Автор: 42- Размещён: 27.09.2011 10:117 плюса
Вы не можете отрицательно индексировать символьный вектор при индексации. Преврати свой вектор remove
в логическое значение. Я определил функцию
`%notin%` <- function(x,y) !(x %in% y)
который затем можно использовать как таковой: g[rownames(g) %notin% remove ,]
4 плюса
Я использую "setdiff" следующим образом:
g[setdiff(rownames(g),remove),]
Автор: Ofri Mann
Размещён: 29.05.2017 11:53
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- matrix Функция транспонирования / распаковки (обратная сторона zip)?
- matrix Как вы вращаете двумерный массив?
- matrix Как мне перебрать каждый элемент в n-мерной матрице в MATLAB?
- matrix Компактная матричная индексация MATLAB
- matrix How do I resize a matrix in MATLAB?
- subset best way to pick a random subset from a collection?
- subset Проверьте, является ли массив подмножеством другого
- subset Фильтрация строк данных.файла по логическому условию
- subset Извлечь подмножество кадра данных на основе условия, включающего поле
- subset Вычисление всех подмножеств набора чисел
- rowname Как убрать строки матрицы по имени строки, а не по числовому индексу?
- rowname имена строк и имен с определенным значением
- rowname Преобразование имен строк в нескольких фреймах данных в столбец в фрейме данных
- rowname Удаление отображения имен строк из фрейма данных
- rowname Преобразовать имена строк в первый столбец