我有一个数据集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
我想为特定values
过滤掉field_pointpath
例如:
C_THDxL_0154x6KSFS_的 A03 x6KSF_11xaP_ACT
带有 A 字符的不应该value
大于60:
同样 ,
C_THDxL_0154x6KSFS_的 B03 x6KSF_11xaP_ACT,
C_THDxL_0154x6KSFS_的 B03 x6KSF_11xaP_ACT
的字符 B 不应该value
大于30
因此输出应为
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
答案 0 :(得分:3)
您可以使用regular expression
过滤field_pointpath
。我假设您正在寻找 _A 或 _B 后跟2位数的条目。然后将其与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
答案 1 :(得分:2)
df[(substr(df$field_pointpath, 20,20)=="A" & df$value <= 60) |
(substr(df$field_pointpath, 20,20)=="B" & df$value <= 30),]
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
答案 2 :(得分:1)
您可以使用以下代码:
# your data, with 2 lines appended that will not be selected
my_df <- read.table(header = TRUE,
text = "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
C_THDxL_0154x6KSFS_C03xaP_ACT 6KSFS 30 ## added
C_THDxL_0154x6KSFS_D03xaP_ACT 6KSFS 30 ## added
")
library(stringr)
my_df2 <- my_df[ (str_detect( my_df$field_pointpath, "_A03") & my_df$value <= 30)
| ( str_detect(my_df$field_pointpath, "_B03") & my_df$value <= 60 ), ]
请告诉我这是否是你想要的。