我有一个矩阵或具有特定列名的数据框。使用包含一些列名称的向量,我可以轻松地处理矩阵的那些列。但是,还有一种简单的方法可以解决相反的列,这些列未在向量中列出:
mat <- matrix(c(1:12), ncol=4)
colnames(mat) <- c("a", "b", "c", "d")
not_target_col <- c("a", "b")
在这种情况下,我希望列c
和d
。
我搜索这样的东西,没有采取额外的步骤:
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 :(得分:0)
我们可以在列名(setdiff
)和colnames
之间使用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
答案 1 :(得分:0)
另一个选项是%in%
mat[, !colnames(mat) %in% not_target_col]
# c d
#[1,] 7 10
#[2,] 8 11
#[3,] 9 12