假设有一个矩阵 - 'mat',它有115列。根据某些列名的列表对一个矩阵进行子集
还有另一个矩阵 - 'res_mat',它有一列,它有前面矩阵'mat'的38个列名。
我想创建第三个矩阵 - 'fin_mat',它将成为第一个矩阵'mat'的一个子集,其中第一个矩阵的列被存储为第二个矩阵'res_mat'的列中的值。
换句话说,我有一个存储在变量中的列名列表。如何创建包含存储在变量中的列的第一个矩阵的子集?
假设有一个矩阵 - 'mat',它有115列。根据某些列名的列表对一个矩阵进行子集
还有另一个矩阵 - 'res_mat',它有一列,它有前面矩阵'mat'的38个列名。
我想创建第三个矩阵 - 'fin_mat',它将成为第一个矩阵'mat'的一个子集,其中第一个矩阵的列被存储为第二个矩阵'res_mat'的列中的值。
换句话说,我有一个存储在变量中的列名列表。如何创建包含存储在变量中的列的第一个矩阵的子集?
一种方法是使用函数“select”和“one_of”的dplyr包。 One_of允许根据名称选择列(以字符串格式)。
下面是一个简单的虹膜表示例,其中我提取了列名“Sepal.Length”和“Sepal.Width”。
library(dplyr)
mat1 <- iris
mat2 <- data.frame(names = c("Sepal.Length", "Sepal.Width")) %>%
mutate(names = as.character(names)) #make sure the names are characters
results <- mat1 %>% select(one_of(mat2$names))
感谢您使用此代码。它工作没有任何问题。 –
它可以很容易地完成。在下面的代码中,我可以创建一个数据帧mat
和另一个res_mat
。 mat
有数据,res_mat
有一列 - select_these_columns
。 mat
数据帧有10列,分别命名为a,b,c,d,e ...,j。 select_thes_cols
列res_mat
有五行,分别为条目a,b,c,d,e。所有需要做的是通过res_mat$select_these_cols
到mat
a <- (matrix(rnorm(1000), nrow = 100, ncol = 10))
mat <- as.data.frame(a)
names(mat) <- letters[1:10]
res_mat <- data.frame(x = letters[1:5])
names(res_mat) <- 'select_these_cols'
fin_mat <- mat[res_mat$select_these_cols] # subsetting operation
你好 感谢您的回复。但是,它没有给我想要的结果。 预期的结果是 西1 - “A” 西3 - “C” 山口4 - “d” 然而,它是给我是 西1 - “A” 西2 - “B “ Col 3 - ”C“ 希望你得到它。 –
似乎并不十分困难。如果我正确理解你的问题,这样的事情就可以做到。
# 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 - “A” 西3 - “C” 山口4 - “d” 然而,它是给我是 西1 - “A” 西2 - “B “ Col 3 - ”C“ 希望你得到它。 –
请检查[mcve]。 –