test[apply(test[, signalcolumns, with = FALSE] > 5, 1, all)]
# ID time Input X1 X2 X3 X4
# 1: 1 4 0 18 14 11 17
# 2: 1 8 0 15 20 15 14
# 3: 2 4 0 18 14 11 17
# 4: 2 8 0 15 20 15 14
Update
Here is a walk-through of the steps followed.
test
# ID time Input X1 X2 X3 X4
# 1: 1 1 0 11 5 12 3
# 2: 1 2 0 15 4 17 10
# 3: 1 3 0 3 16 10 19
# 4: 1 4 0 18 14 11 17
# 5: 1 5 0 10 18 7 3
# 6: 1 6 1 2 16 3 6
# 7: 1 7 0 2 4 5 5
# 8: 1 8 0 15 20 15 14
# 9: 1 9 0 16 20 11 5
# 10: 1 10 0 14 5 6 11
# 11: 2 1 0 11 5 12 3
# 12: 2 2 0 15 4 17 10
# 13: 2 3 0 3 16 10 19
# 14: 2 4 0 18 14 11 17
# 15: 2 5 0 10 18 7 3
# 16: 2 6 1 2 16 3 6
# 17: 2 7 0 2 4 5 5
# 18: 2 8 0 15 20 15 14
# 19: 2 9 0 16 20 11 5
# 20: 2 10 0 14 5 6 11
Now generate a table of TRUE/FALSE values based upon being > 5
test_truth <- test[, signalcolumns, with = FALSE] > 5
test_truth
# X1 X2 X3 X4
# [1,] TRUE FALSE TRUE FALSE
# [2,] TRUE FALSE TRUE TRUE
# [3,] FALSE TRUE TRUE TRUE
# [4,] TRUE TRUE TRUE TRUE
# [5,] TRUE TRUE TRUE FALSE
# [6,] FALSE TRUE FALSE TRUE
# [7,] FALSE FALSE FALSE FALSE
# [8,] TRUE TRUE TRUE TRUE
# [9,] TRUE TRUE TRUE FALSE
# [10,] TRUE FALSE TRUE TRUE
# [11,] TRUE FALSE TRUE FALSE
# [12,] TRUE FALSE TRUE TRUE
# [13,] FALSE TRUE TRUE TRUE
# [14,] TRUE TRUE TRUE TRUE
# [15,] TRUE TRUE TRUE FALSE
# [16,] FALSE TRUE FALSE TRUE
# [17,] FALSE FALSE FALSE FALSE
# [18,] TRUE TRUE TRUE TRUE
# [19,] TRUE TRUE TRUE FALSE
# [20,] TRUE FALSE TRUE TRUE
Then, use apply over each row. The function to apply is all, which will return TRUE if all values applied to it are TRUE, and FALSE if any of the values are not true. Therefore, it will return TRUE for all rows where all of the values are TRUE.
truth_vect <- apply(test_truth, 1, all)
truth_vect
# [1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE
This is the vector we need to use to subset the table.
test[truth_vect]
# ID time Input X1 X2 X3 X4
# 1: 1 4 0 18 14 11 17
# 2: 1 8 0 15 20 15 14
# 3: 2 4 0 18 14 11 17
# 4: 2 8 0 15 20 15 14
data.tablebut you can dotest[rowSums(test[, .SD > 5, .SDcols = signalcolumns]) == length(signalcolumns),]