多准则grep记录

多准则grep记录,r,criteria,R,Criteria,我有一系列的供应商和账单金额,账单金额分组到桶中 我想将数据集子集为仅在‘1000’桶中都有金额的提供者。样本数据: df <- structure(list(GrossAmt = c(74.37, 69.69, 705.76, 694.12, 5243, 2680.95, 23270, 64.31, 64.31, 64.31, 1863.6, 4030.38, 43.86, 36.57, 37.29, 31.02, 59.43, 27.65), VenName = structure

我有一系列的供应商和账单金额,账单金额分组到桶中

我想将数据集子集为仅在‘<100’桶以及‘500-1000’桶或‘>1000’桶中都有金额的提供者。样本数据:

df <- structure(list(GrossAmt = c(74.37, 69.69, 705.76, 694.12, 5243, 
2680.95, 23270, 64.31, 64.31, 64.31, 1863.6, 4030.38, 43.86, 
36.57, 37.29, 31.02, 59.43, 27.65), VenName = structure(c(3L, 
3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 1L, 1L, 
1L), .Label = c("Labcorp", "Quest Diagnostics Incorporated", 
"THOMAS JEFFERSON UNIV HOSPITAL", "WASHINGTON HOSPITAL CENTER"
), class = "factor"), AmtGrp = structure(c(1L, 1L, 3L, 3L, 2L, 
2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("<= 100", 
"> 1000", "500 - 1000"), class = "factor")), .Names = c("GrossAmt", 
"VenName", "AmtGrp"), class = "data.frame", row.names = c(NA, 
-18L))

df这里有一个基本函数
ave
subset
的解决方案:

subset(df, as.logical(ave(as.character(AmtGrp), VenName, FUN = function(x) 
  any(x == "<= 100") & any(x %in% c("500 - 1000", "> 1000")))))

   GrossAmt                        VenName     AmtGrp
1     74.37 THOMAS JEFFERSON UNIV HOSPITAL     <= 100
2     69.69 THOMAS JEFFERSON UNIV HOSPITAL     <= 100
3    705.76 THOMAS JEFFERSON UNIV HOSPITAL 500 - 1000
4    694.12 THOMAS JEFFERSON UNIV HOSPITAL 500 - 1000
5   5243.00 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
6   2680.95 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
7  23270.00 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
8     64.31     WASHINGTON HOSPITAL CENTER     <= 100
9     64.31     WASHINGTON HOSPITAL CENTER     <= 100
10    64.31     WASHINGTON HOSPITAL CENTER     <= 100
11  1863.60     WASHINGTON HOSPITAL CENTER     > 1000
12  4030.38     WASHINGTON HOSPITAL CENTER     > 1000
subset(df,as.logical(ave,as.character(AmtGrp)),VenName,FUN=function(x)
任何(x==“1000”;”))
格罗萨姆特文纳姆酒店
174.37托马斯·杰斐逊大学医院1000
7 23270.00托马斯·杰斐逊大学医院>1000

8 64.31华盛顿医院中心这是一个具有基本功能的解决方案
ave
subset

subset(df, as.logical(ave(as.character(AmtGrp), VenName, FUN = function(x) 
  any(x == "<= 100") & any(x %in% c("500 - 1000", "> 1000")))))

   GrossAmt                        VenName     AmtGrp
1     74.37 THOMAS JEFFERSON UNIV HOSPITAL     <= 100
2     69.69 THOMAS JEFFERSON UNIV HOSPITAL     <= 100
3    705.76 THOMAS JEFFERSON UNIV HOSPITAL 500 - 1000
4    694.12 THOMAS JEFFERSON UNIV HOSPITAL 500 - 1000
5   5243.00 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
6   2680.95 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
7  23270.00 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
8     64.31     WASHINGTON HOSPITAL CENTER     <= 100
9     64.31     WASHINGTON HOSPITAL CENTER     <= 100
10    64.31     WASHINGTON HOSPITAL CENTER     <= 100
11  1863.60     WASHINGTON HOSPITAL CENTER     > 1000
12  4030.38     WASHINGTON HOSPITAL CENTER     > 1000
subset(df,as.logical(ave,as.character(AmtGrp)),VenName,FUN=function(x)
任何(x==“1000”;”))
格罗萨姆特文纳姆酒店
174.37托马斯·杰斐逊大学医院1000
7 23270.00托马斯·杰斐逊大学医院>1000
8 64.31华盛顿医院中心
subset(df, as.logical(ave(as.character(AmtGrp), VenName, FUN = function(x) 
  any(x == "<= 100") & any(x %in% c("500 - 1000", "> 1000")))))

   GrossAmt                        VenName     AmtGrp
1     74.37 THOMAS JEFFERSON UNIV HOSPITAL     <= 100
2     69.69 THOMAS JEFFERSON UNIV HOSPITAL     <= 100
3    705.76 THOMAS JEFFERSON UNIV HOSPITAL 500 - 1000
4    694.12 THOMAS JEFFERSON UNIV HOSPITAL 500 - 1000
5   5243.00 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
6   2680.95 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
7  23270.00 THOMAS JEFFERSON UNIV HOSPITAL     > 1000
8     64.31     WASHINGTON HOSPITAL CENTER     <= 100
9     64.31     WASHINGTON HOSPITAL CENTER     <= 100
10    64.31     WASHINGTON HOSPITAL CENTER     <= 100
11  1863.60     WASHINGTON HOSPITAL CENTER     > 1000
12  4030.38     WASHINGTON HOSPITAL CENTER     > 1000