将逻辑向量与要排除的其他元素组合在一起

时间:2012-12-13 19:21:28

标签: r

我正在计算矩阵中列的逻辑向量,我想用它来查看数据的子集。我将如何结合

duplicate.ids <- c(1, 10, 100)

data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17

获得一个我可以使用的逻辑向量?

ETA:

我有一个价值矩阵:

R> class(All)
[1] "matrix"
R> dim(All)
[1] 6712 6712
R> All[1:5,1:5]
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    0    0
[3,]    0    0    0    0    0
[4,]    0    0    0    0    0
[5,]    0    0    0    0    0

我有关于每个列的另一个元数据矩阵,我想选择该矩阵的一个子集进行进一步分析。我可以运行第二个命令来获取逻辑向量,然后我可以使用它来获取子集

All[,data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17]

但我也想排除一个特定的索引列表(我之前引用的duplicate.ids)。

1 个答案:

答案 0 :(得分:0)

您可以使用which将逻辑向量转换为索引向量,然后使用setdiff计算集合差异,即第二个表达式选择的所有列都不在列表中重复。

合在一起:

All[,setdiff(which(data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17),
             duplicate.ids)]

作为替代方案,您也可以将duplicate.ids转换为逻辑向量:

non.duplicate <- rep(TRUE, ncol(All))
non.duplicate[duplicate.ids] <- FALSE
ALL[,non.duplicate & data$Group == data$Group[person] & data$Unit != 13 & data$Unit != 17]