从矩阵中提取观察

时间:2016-03-22 11:09:00

标签: r variables select matrix

我有一个矩阵(见上文)。我有行的物种和亚种植物的名称。

我想生成相同的矩阵,只有物种和只有亚种的矩阵。

我的初始矩阵中的物种由一个词组成(abeliaabis),子物种总是包含两个词(abies alba等)。

我怎么能在R中做到这一点?

2 个答案:

答案 0 :(得分:1)

假设矩阵名为m,您可以尝试:

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

向@akrun提示,指出lapply(..,length)可以替换为lengths()

甚至更简单:

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,]

答案 1 :(得分:0)

欢迎来到SO,正如所建议的那样,如果你提供样本数据就可以了。

那就是说,我认为你可以做到:

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

然后,您可以使用grep查找包含空格的名称:

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

最后,分配给新的矩阵:

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

作为旁注,我建议使用数据框而不是矩阵,并将名称分配给变量,而不是rownames。