根据一些列名列表对子矩进行子集

时间:2017-08-06 12:30:10

标签: r matrix

假设有一个矩阵 - 'mat',它有115列。

还有另一个矩阵 - 'res_mat',其列有38个前一个矩阵'mat'的列名。

我想创建第三个矩阵 - 'fin_mat',它将是第一个矩阵'mat'的子集,其中的列作为值存储在第二个矩阵'res_mat'的列中。

或者换句话说,我有一个存储在变量中的列名列表。如何创建包含存储在变量中的列的第一个矩阵的子集?

3 个答案:

答案 0 :(得分:4)

看起来并不困难。如果我理解你的问题,这样的事情就可以了。

# First make up some matrix
mat <- matrix(1:24, ncol = 6)
colnames(mat) <- paste0("Col", 1:6)

# These would be the columns to keep
res_mat <- matrix(c("Col1", "Col3", "Col4"), ncol = 1)

fin_mat <- mat[, res_mat[, 1]]
fin_mat

答案 1 :(得分:2)

可以很容易地完成。在下面的代码中,我创建了一个数据框mat,另一个res_matmat包含数据,res_mat有一个名为select_these_columns的列。 mat数据框有10列,分别命名为a,b,c,d,e ...,j。 select_thes_cols的{​​{1}}列有五行,条目为a,b,c,d,e。需要完成的ALl是将res_mat传递给res_mat$select_these_cols

mat

答案 2 :(得分:2)

一种方法是使用带有“select”和“one_of”功能的dplyr包。 One_of允许根据名称选择列(以字符串格式)。

这是一个简单的iris表示例,我在其中提取列名“Sepal.Length”和“Sepal.Width”。

let arr = ["a","b","c"]
if let index = arr.index(where: { (item) -> Bool in
  return (item == "c") 
}) {
    print(index)
}