使用另一个掩码数据帧揭示一个数据帧的值

时间:2016-09-09 13:02:32

标签: r dataframe

假设我有两个数据框AB_mask,其中

A <- as.data.frame( matrix(1:20,nrow=4) )

  V1 V2 V3 V4 V5
1  1  5  9 13 17
2  2  6 10 14 18
3  3  7 11 15 19
4  4  8 12 16 20

并且假设,

B_mask <- matrix(FALSE, nrow=4, ncol=5)
B_mask[2:3, 1:3] <- TRUE  
B_mask <- as.data.frame(B_mask) 

     V1    V2    V3    V4    V5
1 FALSE FALSE FALSE FALSE FALSE
2  TRUE  TRUE  TRUE FALSE FALSE
3  TRUE  TRUE  TRUE FALSE FALSE
4 FALSE FALSE FALSE FALSE FALSE

如何获得result数据框,以便:

  • 如果B_mask中的条目等于TRUE,请在A中显示相应的值?例如,因为B_mask[2,1] = TRUE,我希望result[2,1] = A[2,1] = 2

  • 如果B_mask中的条目等于FALSE,请将A中的相应值覆盖为NA?例如,因为B_mask[3,4] = FALSE,我希望result[3,4] = NA

谢谢!

1 个答案:

答案 0 :(得分:6)

我们创建数据集的副本('res'),将'FALSE'转换为'B_mask'中的NA,并使用逻辑索引对'A'的相应值进行子集化,并将输出分配回'res '结构完整([]

res <- A
res[] <- as.matrix(A)[as.logical(NA^!B_mask)]

或者@alexis_laz提到这也可以用

完成
is.na(res) <- !as.matrix(B_mask)