假设我有两个数据帧A和B_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
Run Code Online (Sandbox Code Playgroud)
并且假设,
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
Run Code Online (Sandbox Code Playgroud)
如何获得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.
谢谢!
我们创建数据集的副本('res'),将'FALSE'转换为'B_mask'中的NA,并使用逻辑索引对'A'的相应值进行子集化,并将输出分配回'res'与'结构完整([])
res <- A
res[] <- as.matrix(A)[as.logical(NA^!B_mask)]
Run Code Online (Sandbox Code Playgroud)
或者@alexis_laz提到这也可以用
is.na(res) <- !as.matrix(B_mask)
Run Code Online (Sandbox Code Playgroud)