最简单的方法是(感谢@thelatemail的灵感)
df[!mask] <- "" # x y # 1 e # 2 f # 3 c # 4 d
这是因为!
强制mask
逻辑矩阵(因此不需要as.matrix()
呼叫)
str(mask) # 'data.frame': 4 obs. of 2 variables: # $ x: logi FALSE FALSE TRUE TRUE # $ y: logi TRUE TRUE FALSE FALSE str(!mask) # logi [1:4, 1:2] TRUE TRUE FALSE FALSE FALSE FALSE ... # - attr(*, "dimnames")=List of 2 # ..$ : NULL # ..$ : chr [1:2] "x" "y" ## and class(!mask) # "matrix"
一些ifelse
s也会起作用
df$x <- ifelse(mask$x, df$x, "") df$y <- ifelse(mask$y, df$y, "")
您可以循环遍历列mapply
,检查以下值mask
:
as.data.frame( mapply(function(x,y) ifelse(y, x, ''), df, mask)) ## x y ## 1 e ## 2 f ## 3 c ## 4 d
我们可以用 replace
replace(df, !mask, "") # x y #1 e #2 f #3 c #4 d