多准则grep记录
我有一系列的供应商和账单金额,账单金额分组到桶中 我想将数据集子集为仅在‘<100’桶以及‘500-1000’桶或‘>1000’桶中都有金额的提供者。样本数据:多准则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
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