如何选择与R中列/行名称相反的列/行?

时间:2017-03-20 06:32:19

标签: 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]

2 个答案:

答案 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