2016-03-29 14 views
1

Her bir öğenin hem satırını hem de sütununu belirten bir matrisi nasıl ayırmalıyım? Şu anda sapply kullanıyorum ama bunun özellikle zarif bulmuyorum:R her öğe için sütun ve satır belirten alt öğe elemanları

> mat <- data.frame(a=c(1,2,3),b=c(7,6,5)) 
> mat 
    a b 
1 1 7 
2 2 6 
3 3 5 
> rowSel <- 1:3 
> colSel <- c(1,2,1) 
> sapply(rowSel,function(i){mat[i,colSel[i]]}) 
[1] 1 6 3 

cevap

4

Daha kısa bir yol:

mat[cbind(rowSel, colSel)] 
#[1] 1 6 3 

Bu twocolumn matrisi tarafından indeksleme kullanır. İlk sütun satırın dizinini içerir, ikinci sütun sütunun dizinini içerir. İki sütun matrisinin her satırı, mat matrisinin bir öğesini endeksler.

+0

Ayrıca NA'ları dizinlerde işlemek için hızlı ve kolay bir yolunuz var mı (NA'ya dönmelisiniz)? – cmbarbu

+0

Ne demek istiyorsun? ColSel <- c (2,1, NA) 'ile sonucun son unsuru" NA "dır. Yeni örneği tanımlamak için lütfen sorunuzu düzenler misiniz? http://stackoverflow.com/posts/36286357/edit – jogo

+0

Haklısınız, NA ile ilgili gerçek hayat problemimden şikayet ediyordum ama başka bir nedenden dolayı üzgünüm. – cmbarbu