尝试匹配从值r的字符串开始的模式



我的数据框架是这样的:

df
BEN_ID Val_1 Val_2 Val_3 Val_4 Val_5     AGE GENDER
1     ID1 vA303     .     .     .     .      25      F
2     ID1  9351  A303 53019 49390 F5D12      52      F
3     ID2 541AZ  1120   462  4019 A36B0      58      M
4     ID2 30302  5939  2768  4019  2724      65      M
5     ID2 305A1 78652  9190  4019 33829      61      M
6     ID3 305A3 29590  5715     .     .      53      M
7     ID3 Z57B9 35981  5849   570  4254      35      M
8     ID3  5693 78900 30590 30500 Z25H2      19      M
9     ID3 7AD59  7881 30301 78900 78791      57      M
10    ID4 7AD59  5780 53530 30390  3051      57      F

我想获得与任何Val_1到Val_5匹配的行,从"303"模式开始或"305"。

所以我的输出应该是这样的:
BEN_ID Val_1 Val_2 Val_3 Val_4 Val_5     AGE GENDER
4     ID2 30302  5939  2768  4019  2724      65      M
5     ID2 305A1 78652  9190  4019 33829      61      M
6     ID3 305A3 29590  5715     .     .      53      M
8     ID3  5693 78900 30590 30500 Z25H2      19      M
9     ID3 7AD59  7881 30301 78900 78791      57      M
10    ID4 7AD59  5780 53530 30390  3051      57      F

我试过这个代码

library(dplyr)
diag_cols = names(df %>% select(starts_with("Val")))
dat_read = dat_read %>% mutate(across(matches("Val"),as.character))
values = "303|3050"
subdf = df %>% filter(grepl(values,do.call(paste,c(df[,diag_cols],sep = ","))))

在此代码中,Row1为真,因为它具有"va303"在Val_1。

我试图采取values = "^303|^305",但这给出了错误的输出

TIA !

dplyr解决方案

library(dplyr)
df %>% 
filter(if_any(starts_with("Val"), ~ grepl("^303|^305", .x)))
BEN_ID Val_1 Val_2 Val_3 Val_4 Val_5 AGE GENDER
4     ID2 30302  5939  2768  4019  2724  65      M
5     ID2 305A1 78652  9190  4019 33829  61      M
6     ID3 305A3 29590  5715     .     .  53      M
8     ID3  5693 78900 30590 30500 Z25H2  19      M
9     ID3 7AD59  7881 30301 78900 78791  57      M
10    ID4 7AD59  5780 53530 30390  3051  57      F

基于R的方法:

df[apply(df[, -c(1,7,8)], 1, function(x) any(grepl("^303|^305", x))), ]
BEN_ID Val_1 Val_2 Val_3 Val_4 Val_5 AGE GENDER
4     ID2 30302  5939  2768  4019  2724  65      M
5     ID2 305A1 78652  9190  4019 33829  61      M
6     ID3 305A3 29590  5715     .     .  53      M
8     ID3  5693 78900 30590 30500 Z25H2  19      M
9     ID3 7AD59  7881 30301 78900 78791  57      M
10    ID4 7AD59  5780 53530 30390  3051  57      F

相关内容

最新更新