You could do it with data.table like so
Load data into data.table. Call it DT. Say cols 2 through 4 are numeric.
Theta = 0.15
Drop <- DT[, lapply(.SD, function (x) {sum(is.na(x))/length(x) > Theta} ), .SDcols = 2:4]
Cols.2.Drop <- names(Drop)[which(Drop==TRUE)]
DT[, (Cols.2.Drop) := NULL]
Tested with data here:
Obs Var1 Var2 Var3
A0001 21 21 21
A0002 21 78 321
A0003 32 98 87
A0004 21 12 54
A0005 21 13 45
A0006 21 87 45
B0007 84 NA 45
B0008 21 NA 98
B0009 2 NA 45
B0010 12 NA 45