2017-03-20 82 views
1

我有一个矩阵或具有特定列名称的数据帧。使用包含一些列名称的矢量,我可以轻松地处理矩阵的这些列。但有也解决对面列,未在载体中列出一个简单的方法:如何选择R中与列/行名称相反的列/行?

mat <- matrix(c(1:12), ncol=4) 
colnames(mat) <- c("a", "b", "c", "d") 
not_target_col <- c("a", "b") 
在这种情况下,我喜欢有列 cd

。 我搜索这样的事情,不使额外的步骤:

pos <- colnames(mat) != not_target_col 
mat[,pos] 

附加说明

我想更清楚:如果我有一个数字矢量,我可以得到相反的,当我添加*-1

not_target_col <- c(1,2) 
mat[,not_target_col * -1] 

当我使用逻辑向量时,还有一种像这样的技术。在这里,我只需要添加一个!

not_target_col <- c(T,T,F,F) 
mat[,!not_target_col] 
+0

@akrun definitly,我现在怎么办? –

+0

你无能为力。有人会对它进行标记 – akrun

+0

我在下面添加了另一个解决方案 – akrun

回答

0

我们可以用列名之间setdiffcolnames)和not_target_col得到不与not_target_col匹配的列名。

setdiff(colnames(mat), not_target_col) 
#[1] "c" "d" 

如果我们需要从矩阵选择那些列

mat[, setdiff(colnames(mat), not_target_col)] 

#  c d 
#[1,] 7 10 
#[2,] 8 11 
#[3,] 9 12 
0

另一种选择是%in%

mat[, !colnames(mat) %in% not_target_col] 
#  c d 
#[1,] 7 10 
#[2,] 8 11 
#[3,] 9 12