假设有一个矩阵 - 'mat',它有115列。
还有另一个矩阵 - 'res_mat',其列有38个前一个矩阵'mat'的列名。
我想创建第三个矩阵 - 'fin_mat',它将是第一个矩阵'mat'的子集,其中的列作为值存储在第二个矩阵'res_mat'的列中。
或者换句话说,我有一个存储在变量中的列名列表。如何创建包含存储在变量中的列的第一个矩阵的子集?
答案 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_mat
。 mat
包含数据,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)
}