You can use the nearZeroVar
function from caret.
# set freqCut to 100/0, default is 95/5
caret::nearZeroVar(df1, freqCut = 100/0)
[1] 4 7
using which
from 李哲源:
# option 1
which(colSums(sapply(df1, is.na)) == nrow(df1))
D G
4 7
# option 2
which(colSums(!is.na(df1)) == 0)
D G
4 7
benchmark:
microbenchmark::microbenchmark(caret = caret::nearZeroVar(df1, freqCut = 100/0),
which1 = which(colSums(sapply(df1, is.na)) == nrow(df1)),
which2 = which(colSums(!is.na(df1)) == 0))
Unit: microseconds
expr min lq mean median uq max neval
caret 1092.459 1109.8670 1266.86065 1130.494 1166.1870 13563.868 100
which1 29.843 34.0850 39.03823 38.473 42.1310 110.885 100
which2 21.358 24.5765 28.99438 29.111 32.7685 52.663 100
which
option 2 is overall the fastest.