The regular expression that I can come up with for that would be something like this example, but unfortunatly tidyselect doesn't support look-ahead on its regex dialect and I don't know a walk around for this.
mergiato <- data.frame(subject="" , Gender="",Weight="", Height="",Age="",test="",act="",VelInc_X_mean="",VelInc_Y_mean="",VelInc_Z_mean="", VelInc_X_SD="",VelInc_Y_SD="",VelInc_Z_SD="",VelInc_MEAN="",VelInc_SD="", OriInc_w_mean="",OriInc_w_SD="",OriInc_x_mean="",OriInc_x_SD="",OriInc_y_mean="",OriInc_y_SD="",OriInc_z_mean="",OriInc_z_SD="",OriInc_MEAN="",OriInc_SD="",Acc_X_SD="",Acc_Y_mean="",Acc_Y_SD="",Acc_Z_mean="",Acc_Z_SD="",Acc_MEAN="",Acc_SD="",Gyr_X_mean="",Gyr_X_SD="", Gyr_Y_mean="",Gyr_Y_SD="",Gyr_Z_mean="",Gyr_Z_SD="",Gyr_MEAN="",Gyr_SD="",Mag_X_mean="",Mag_X_SD="",Mag_Y_mean="",Mag_Y_SD="",Mag_Z_mean="",Mag_Z_SD="",Mag_MEAN="",Mag_SD="",Roll_mean="",Pitch_mean="",Yaw_mean="",RSSI_mean="")
grep("^(?!.*_X?x?_)(?!.*_Y?y?_)(?!.*_Z?z?_)", names(mergiato), perl = TRUE, value = TRUE)
#> [1] "subject" "Gender" "Weight" "Height"
#> [5] "Age" "test" "act" "VelInc_MEAN"
#> [9] "VelInc_SD" "OriInc_w_mean" "OriInc_w_SD" "OriInc_MEAN"
#> [13] "OriInc_SD" "Acc_MEAN" "Acc_SD" "Gyr_MEAN"
#> [17] "Gyr_SD" "Mag_MEAN" "Mag_SD" "Roll_mean"
#> [21] "Pitch_mean" "Yaw_mean" "RSSI_mean"
EDIT: It turns out that I can avoid using tidyselect at all
mergiato <- data.frame(subject="" , Gender="",Weight="", Height="",Age="",test="",act="",VelInc_X_mean="",VelInc_Y_mean="",VelInc_Z_mean="", VelInc_X_SD="",VelInc_Y_SD="",VelInc_Z_SD="",VelInc_MEAN="",VelInc_SD="", OriInc_w_mean="",OriInc_w_SD="",OriInc_x_mean="",OriInc_x_SD="",OriInc_y_mean="",OriInc_y_SD="",OriInc_z_mean="",OriInc_z_SD="",OriInc_MEAN="",OriInc_SD="",Acc_X_SD="",Acc_Y_mean="",Acc_Y_SD="",Acc_Z_mean="",Acc_Z_SD="",Acc_MEAN="",Acc_SD="",Gyr_X_mean="",Gyr_X_SD="", Gyr_Y_mean="",Gyr_Y_SD="",Gyr_Z_mean="",Gyr_Z_SD="",Gyr_MEAN="",Gyr_SD="",Mag_X_mean="",Mag_X_SD="",Mag_Y_mean="",Mag_Y_SD="",Mag_Z_mean="",Mag_Z_SD="",Mag_MEAN="",Mag_SD="",Roll_mean="",Pitch_mean="",Yaw_mean="",RSSI_mean="")
library(dplyr)
mergiato %>%
select(grep("^(?!.*_[XYZ]_)",
names(mergiato),
perl = TRUE,
ignore.case = TRUE,
value = TRUE))
#> subject Gender Weight Height Age test act VelInc_MEAN VelInc_SD
#> 1
#> OriInc_w_mean OriInc_w_SD OriInc_MEAN OriInc_SD Acc_MEAN Acc_SD Gyr_MEAN
#> 1
#> Gyr_SD Mag_MEAN Mag_SD Roll_mean Pitch_mean Yaw_mean RSSI_mean
#> 1