Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exclude rows surpassing threshold value

I have a dataset df

  field_pointpath                       assetclass_code value
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT      6KSFS_6KSF   50
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT      6KSFS_6KSF   60
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT      6KSFS_6KSF   65
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT      6KSFS_6KSF   43
C_THDxL_0154x6KSFS_A03xaP_ACT                  6KSFS    70
C_THDxL_0154x6KSFS_A03xaP_ACT                  6KSFS    55
C_THDxL_0154x6KSFS_A03xaP_ACT                  6KSFS    43
C_THDxL_0154x6KSFS_A03xaP_ACT                  6KSFS    11
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT     6KSFS_6KSF    67
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT     6KSFS_6KSF    36
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT     6KSFS_6KSF    39
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT     6KSFS_6KSF    33
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT     6KSFS_6KSF    20
C_THDxL_0154x6KSFS_B03xaP_ACT                  6KSFS    21
C_THDxL_0154x6KSFS_B03xaP_ACT                  6KSFS    22
C_THDxL_0154x6KSFS_B03xaP_ACT                  6KSFS    17
C_THDxL_0154x6KSFS_B03xaP_ACT                  6KSFS    30

I want to filter out values for specific field_pointpath for example:

  • C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT
  • C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT

    which has a character A should not have value greater than 60:

Similarly,

  • C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT,

  • C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT

    which has a character B should not have value greater than 30

Thus output should be

                    field_pointpath    assetclass_code  value
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT   6KSFS_6KSF       50
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT   6KSFS_6KSF       60
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT   6KSFS_6KSF       43
C_THDxL_0154x6KSFS_A03xaP_ACT              6KSFS         55
C_THDxL_0154x6KSFS_A03xaP_ACT              6KSFS         43
C_THDxL_0154x6KSFS_A03xaP_ACT              6KSFS         11
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT   6KSFS_6KSF       20
C_THDxL_0154x6KSFS_B03xaP_ACT              6KSFS         21
C_THDxL_0154x6KSFS_B03xaP_ACT              6KSFS         22
C_THDxL_0154x6KSFS_B03xaP_ACT              6KSFS         17
C_THDxL_0154x6KSFS_B03xaP_ACT              6KSFS         30
like image 892
user3301082 Avatar asked Jun 16 '26 14:06

user3301082


1 Answers

You can use regular expression to filter on field_pointpath. I am assuming that you are looking for entries where there is _A or _B followed by 2 digits. Then you combine that with the filter on value:

ind <- (grepl("\\_A[0-9]{2}", df$field_pointpath) & df$value > 60) | 
       (grepl("\\_B[0-9]{2}", df$field_pointpath) & df$value > 30)
df[!ind, ]

#                          field_pointpath assetclass_code value
# 1  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT      6KSFS_6KSF    50
# 2  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT      6KSFS_6KSF    60
# 4  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACT      6KSFS_6KSF    43
# 6          C_THDxL_0154x6KSFS_A03xaP_ACT           6KSFS    55
# 7          C_THDxL_0154x6KSFS_A03xaP_ACT           6KSFS    43
# 8          C_THDxL_0154x6KSFS_A03xaP_ACT           6KSFS    11
# 13 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACT      6KSFS_6KSF    20
# 14         C_THDxL_0154x6KSFS_B03xaP_ACT           6KSFS    21
# 15         C_THDxL_0154x6KSFS_B03xaP_ACT           6KSFS    22
# 16         C_THDxL_0154x6KSFS_B03xaP_ACT           6KSFS    17
# 17         C_THDxL_0154x6KSFS_B03xaP_ACT           6KSFS    30  
like image 55
thothal Avatar answered Jun 19 '26 04:06

thothal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!