2016-03-22 18 views
-1

Bir matrisim var (yukarıya bakın). Satırlardaki bitki türlerinin ve alt türlerinin ismini biliyorum.Bir Matristen Ayıklama Gözlemi

Aynı matrisi yalnızca türlerle ve yalnızca alt türlerle bir matrisle oluşturmak istiyorum.

İlk matrisimde bulunan türler bir sözcükten (abelia, abis) oluşur ve alt türler her zaman iki sözcük içerir (abies alba, vb.).

Bunu R? Matris m denir varsayarsak

+4

Yığın Taşmasına Hoş Geldiniz! Lütfen [tur] (http://stackoverflow.com/tour) adresini ziyaret edin ve burada sorulardan ne beklediğimizi öğrenmek için [Nasıl Sorulur?] (Http://stackoverflow.com/help/how-to-ask) sayfasını okuyun. Burada çizilmeden kodlama hizmeti vermediğimizi lütfen unutmayın. Lütfen bize neyi denediğini, nasıl başarısız olduğunu ve yardım edebileceğimizi göster. – Nitish

cevap

1

, bu deneyebilirsiniz:

species_rows <- lengths(strsplit(rownames(m)," "))==1 #split the rownames at whitespaces, retain only rows that are not split (vector of length 1). 
species_mat <- m[species_rows,] #logical subsetting 
subspecies_mat <- m[!species_rows,] #logical subsetting with negation 

Şapka ucu lapply(..,length)lengths() ile değiştirilebilir Buna dikkat çektiğin için @akrun için.


Veya daha da basit

: önerildiği gibi Sorunuzun örnek veri verdiyse

species_rows <- !grepl(" ",rownames(m)) # does the row.name NOT contain a whitespace? (TRUE/FALSE) 
species_mat <- m[species_rows,] 
subspecies_mat <- m[!species_rows,] 
0

Hoşgeldin SO, bu iyi olurdu etmek. sözü

, ben yapabileceğiniz düşünüyorum:

sp <- grep(" ", rownames(a)) 

Ve nihayet, yeni matrisler atamak:

# First, generate data: 
a <- matrix(sample(c(0, 1), 20), ncol = 4) 
rownames(a) <- c("abies", 
       "abies alba", 
       "abies amabilis", 
       "abies balsamea", 
       "abies concolor") 

Sonra bir boşluk içeren adları bulmak için grep kullanabilirsiniz:

subspecies <- a[sp,] 
species <- a[-sp,] 

Bir yan not olarak, bir matris yerine bir veri çerçevesiyle çalışmanızı öneririz. d isimleri rownames yerine bir değişkene atamak.

İlgili konular