2013-12-04 2 views
1

Я пытаюсь подмножить матрицу, чтобы получить только матрицу, где первая переменная больше второй. У меня есть матрица out, которая является матрицей 3000x2.подмножество матрицы при сохранении row.names

Я попытался

out<-out[out[,1] > out[,2]] 

но это устраняет row.names в целом, и я получаю строку чисел от 1 до 3000. Будет ли способ сохранить row.names?

+1

Все что вам нужно, это запятая. 'out [out [, 1]> out [, 2],]' –

+0

@NealFultz: вы должны опубликовать это как ответ ... возможно, объясняя, зачем вам нужна запятая;) – nico

ответ

1

Матрица обрабатывается R как вектор с колонками и строками.

> A <- matrix(1:9, ncol=3) 

# A is filled with 1,...,9 columnwise 
> A 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 

# only elements with even number in 2nd column of same row 

> v <- A[A[,2] %% 2 == 0] 

> m <- A[A[,2] %% 2 == 0,] 

> v 
[1] 1 3 4 6 7 9 

> m 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 3 6 9 

# The result of evaluating odd/even-ness of middle column. 
# This boolean vector is repeated column-wise by default 
# until all element's fate in A is determined. 

> A[,2] %% 2 == 0 
[1] TRUE FALSE TRUE 

Когда вы выходите из запятой (v), то вы обращаетесь A как 1-мерная структура данных и R неявным обрабатывает ваше выражение в качестве вектора.

v в этом смысле не «целая цепочка», а вектор целых чисел. Когда вы добавляете запятую, вы указываете R, что ваше условие только присваивает первое измерение, указывая на второе (после запятой) - что заставляет R обрабатывать ваше выражение как матрицу (m).

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