Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取dataframe中每个列的列名,其中值不超过dplyr函数中定义的列范围_R_Dataframe_Dplyr - Fatal编程技术网

提取dataframe中每个列的列名,其中值不超过dplyr函数中定义的列范围

提取dataframe中每个列的列名,其中值不超过dplyr函数中定义的列范围,r,dataframe,dplyr,R,Dataframe,Dplyr,我正在尝试编写一个函数,该函数采用dataframe、一个确定是否满足特定条件以将该框架子集的列、一个具有数值的列、一个分组子句和一个子集名称作为参数 我希望函数检查定义范围内的哪些列的值不是NA,然后提取这些列的列名,并将它们附加到函数为dplyr根据grouping子句生成的每个汇总行生成的dplyr表中。我在一个更大、更复杂的数据帧的数百个子集上做这项工作,所以这就是为什么我需要一个可以反复使用的函数 示例数据集如下所示,我已使用扩展的数据集对其进行了更新 向那些试图帮助他人的人道歉: s

我正在尝试编写一个函数,该函数采用dataframe、一个确定是否满足特定条件以将该框架子集的列、一个具有数值的列、一个分组子句和一个子集名称作为参数

我希望函数检查定义范围内的哪些列的值不是NA,然后提取这些列的列名,并将它们附加到函数为dplyr根据grouping子句生成的每个汇总行生成的dplyr表中。我在一个更大、更复杂的数据帧的数百个子集上做这项工作,所以这就是为什么我需要一个可以反复使用的函数

示例数据集如下所示,我已使用扩展的数据集对其进行了更新 向那些试图帮助他人的人道歉:

structure(list(superKey = c("12015", "12016", "12017", "12018", 
"22015", "22016", "22017", "22018", "32015", "1722016", "1722017", 
"1722018", "1732015", "1732016", "1732017", "1732018", "1742015", 
"1752015", "1752016", "1752017", "1762015", "1762018", "1772016", 
"1772017", "1772018", "1782015", "1782016", "1782017", "1782018", 
"1792015", "1792016", "1792017", "1792018", "1802015", "1812018", 
"1822016", "1832015", "1832017", "1842015", "1842016", "1842017", 
"1842018", "1852016", "1852017", "1852018", "2112018", "2122015", 
"2122016", "2122017", "2122018", "2132015", "2132016", "2132017", 
"2132018", "2142015", "2142016", "2142017", "2142018", "2152015", 
"2152016", "2152017", "2152018", "2162016", "2162017", "2172015", 
"2172016", "2172017", "2172018", "2182015", "2182016", "2182017", 
"2182018", "2192016", "2192017", "2192018", "2202015", "2202016", 
"2202017", "2202018", "2212015", "2212016", "2212017", "2212018", 
"2222015", "2222018", "2232015", "2232016", "2232017", "2232018", 
"2242015", "2242016", "2302018", "2312015", "2312016", "2312017", 
"2312018", "2322016", "2322017", "2332015", "2332016", "2332017", 
"2332018", "2342016", "2342017", "2432018", "2442015", "2442016"
), reportDate = c("2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", 
"2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", "2015-12-31", 
"2016-12-31", "2017-12-31", "2018-12-31", "2015-12-31", "2016-12-31", 
"2017-12-31", "2018-12-31", "2015-12-31", "2015-12-31", "2016-12-31", 
"2017-12-31", "2015-12-31", "2018-12-31", "2016-12-31", "2017-12-31", 
"2018-12-31", "2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", 
"2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", "2015-12-31", 
"2018-12-31", "2016-12-31", "2015-12-31", "2017-12-31", "2015-12-31", 
"2016-12-31", "2017-12-31", "2018-12-31", "2016-12-31", "2017-12-31", 
"2018-12-31", "2018-12-31", "2015-12-31", "2016-12-31", "2017-12-31", 
"2018-12-31", "2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", 
"2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", "2015-12-31", 
"2016-12-31", "2017-12-31", "2018-12-31", "2016-12-31", "2017-12-31", 
"2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", "2015-12-31", 
"2016-12-31", "2017-12-31", "2018-12-31", "2016-12-31", "2017-12-31", 
"2018-12-31", "2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", 
"2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", "2015-12-31", 
"2018-12-31", "2015-12-31", "2016-12-31", "2017-12-31", "2018-12-31", 
"2015-12-31", "2016-12-31", "2018-12-31", "2015-12-31", "2016-12-31", 
"2017-12-31", "2018-12-31", "2016-12-31", "2017-12-31", "2015-12-31", 
"2016-12-31", "2017-12-31", "2018-12-31", "2016-12-31", "2017-12-31", 
"2018-12-31", "2015-12-31", "2016-12-31"), employerClass = c("class1", 
"class1", "class1", "class1", "class1", "class1", "class1", "class1", 
"class1", "class1", "class1", "class1", "class1", "class1", "class1", 
"class1", "class1", "class1", "class1", "class1", "class1", "class1", 
"class1", "class1", "class1", "class1", "class1", "class1", "class1", 
"class1", "class1", "class1", "class1", "class1", "class1", "class1", 
"class1", "class1", "class1", "class1", "class1", "class1", "class1", 
"class1", "class1", "class2", "class2", "class2", "class2", "class2", 
"class2", "class2", "class2", "class2", "class2", "class2", "class2", 
"class2", "class2", "class2", "class2", "class2", "class2", "class2", 
"class2", "class2", "class2", "class2", "class2", "class2", "class2", 
"class2", "class2", "class2", "class2", "class2", "class2", "class2", 
"class2", "class2", "class2", "class2", "class2", "class2", "class1", 
"class2", "class2", "class2", "class2", "class2", "class2", "class2", 
"class2", "class2", "class2", "class2", "class2", "class2", "class2", 
"class2", "class2", "class2", "class2", "class2", "class2", "class2", 
"class2"), healthRegion = c("Region1", "Region1", "Region1", 
"Region1", "Region2", "Region2", "Region2", "Region2", "Region2", 
"Region3", "Region3", "Region3", "Region4", "Region4", "Region4", 
"Region4", "Region3", "Region3", "Region3", "Region3", "Region3", 
"Region3", "Region2", "Region2", "Region2", "Region3", "Region3", 
"Region3", "Region3", "Region2", "Region2", "Region2", "Region2", 
"Region3", "Region4", "Region4", "Region3", "Region3", "Region1", 
"Region1", "Region1", "Region1", "Region2", "Region2", "Region2", 
"Region2", "Region2", "Region2", "Region2", "Region2", "Region3", 
"Region3", "Region3", "Region3", "Region3", "Region3", "Region3", 
"Region3", "Region4", "Region4", "Region4", "Region4", "Region2", 
"Region2", "Region3", "Region3", "Region3", "Region3", "Region3", 
"Region3", "Region3", "Region3", "Region1", "Region1", "Region1", 
"Region3", "Region3", "Region3", "Region3", "Region4", "Region4", 
"Region4", "Region4", "Region3", "Region3", "Region3", "Region3", 
"Region3", "Region3", "Region4", "Region4", "Region1", "Region1", 
"Region1", "Region1", "Region1", "Region3", "Region3", "Region2", 
"Region2", "Region2", "Region2", "Region1", "Region1", "Region1", 
"Region2", "Region2"), contactID = c(1, 1, 1, 1, 2, 2, 2, 2, 
3, 172, 172, 172, 173, 173, 173, 173, 174, 175, 175, 175, 176, 
176, 177, 177, 177, 178, 178, 178, 178, 179, 179, 179, 179, 180, 
181, 182, 183, 183, 184, 184, 184, 184, 185, 185, 185, 211, 212, 
212, 212, 212, 213, 213, 213, 213, 214, 214, 214, 214, 215, 215, 
215, 215, 216, 216, 217, 217, 217, 217, 218, 218, 218, 218, 219, 
219, 219, 220, 220, 220, 220, 221, 221, 221, 221, 222, 222, 223, 
223, 223, 223, 224, 224, 230, 231, 231, 231, 231, 232, 232, 233, 
233, 233, 233, 234, 234, 243, 244, 244), funder1 = c(500, 500, 
500, 500, 500, 500, 500, 500, NA, NA, NA, NA, 500, 500, 500, 
500, 500, 500, 500, 500, 500, 500, 500, 500, 500, NA, NA, NA, 
NA, 500, 500, 500, 500, 500, 500, 500, 500, 500, NA, NA, NA, 
NA, NA, NA, NA, 500, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 500, 500, 500, 500, NA, NA, 500, 500, 500, 500, 500, 
500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 
500, 500, 500, 500, 500, 500, 500, 500, 500, NA, NA, NA, NA, 
NA, NA, NA, 500, 500, 500, 500, NA, NA, 500, NA, NA), funder2 = c(1000, 
1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, NA, NA, NA, NA, 
NA, NA, NA, 1000, NA, NA, NA, 1000, NA, 1000, 1000, 1000, NA, 
NA, 1000, 1000, 1000, 1000, 1000, 1000, 1000, NA, NA, 1000, 1000, 
1000, 1000, 1000, 1000, NA, NA, NA, 1000, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1000, 1000, 1000, 1000, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 1000, 1000, 1000, 1000, NA, NA, NA, NA, NA, NA, 
NA, 1000, 1000, NA, NA, NA, NA, 1000, 1000, NA, NA, NA), funder3 = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), funder4 = c(NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA), funder5 = c(2500, 2500, 
2500, 2500, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, 2500, 2500, 2500, 2500, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 2500, 2500, NA, NA, NA), others = c(3000, 
3000, 3000, 3000, NA, NA, NA, NA, 3000, 3000, 3000, 3000, NA, 
NA, NA, NA, 3000, NA, NA, NA, 3000, NA, NA, NA, NA, 3000, 3000, 
3000, 3000, 3000, 3000, 3000, 3000, NA, NA, NA, NA, NA, 3000, 
3000, 3000, 3000, NA, NA, NA, NA, NA, NA, NA, NA, 3000, 3000, 
3000, NA, NA, NA, NA, NA, NA, NA, 3000, 3000, 3000, 3000, 3000, 
3000, 3000, 3000, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, 3000, 3000, NA, NA, 3000, 3000, 3000, 
3000, 3000, 3000, 3000, 3000, 3000, NA, NA, NA, NA, 3000, NA, 
NA, NA, 3000), total = c(7000, 7000, 7000, 7000, 1500, 1500, 
1500, 1500, 4000, 3000, 3000, 3000, 500, 500, 500, 500, 4500, 
500, 500, 500, 4500, 500, 1500, 1500, 1500, 3000, 3000, 4000, 
4000, 4500, 4500, 4500, 4500, 1500, 500, 500, 1500, 1500, 4000, 
4000, 4000, 4000, 0, 0, 0, 1500, 0, 0, 0, 0, 3000, 3000, 3000, 
0, 0, 0, 0, 0, 1500, 1500, 4500, 4500, 3000, 3000, 3500, 3500, 
3500, 3500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 
500, 500, 500, 500, 500, 500, 500, 7000, 7000, 4000, 4000, 3500, 
3500, 3000, 3000, 3000, 3000, 3000, 4000, 4000, 500, 500, 500, 
500, 6500, 3500, 500, 0, 3000), year = c("2015", "2016", "2017", 
"2018", "2015", "2016", "2017", "2018", "2015", "2016", "2017", 
"2018", "2015", "2016", "2017", "2018", "2015", "2015", "2016", 
"2017", "2015", "2018", "2016", "2017", "2018", "2015", "2016", 
"2017", "2018", "2015", "2016", "2017", "2018", "2015", "2018", 
"2016", "2015", "2017", "2015", "2016", "2017", "2018", "2016", 
"2017", "2018", "2018", "2015", "2016", "2017", "2018", "2015", 
"2016", "2017", "2018", "2015", "2016", "2017", "2018", "2015", 
"2016", "2017", "2018", "2016", "2017", "2015", "2016", "2017", 
"2018", "2015", "2016", "2017", "2018", "2016", "2017", "2018", 
"2015", "2016", "2017", "2018", "2015", "2016", "2017", "2018", 
"2015", "2018", "2015", "2016", "2017", "2018", "2015", "2016", 
"2018", "2015", "2016", "2017", "2018", "2016", "2017", "2015", 
"2016", "2017", "2018", "2016", "2017", "2018", "2015", "2016"
), serviceDivision = c("division1", "division1", "division1", 
"division1", "division2", "division2", "division2", "division2", 
"division1", "division1", "division1", "division1", "division2", 
"division2", "division2", "division2", "division1", "division2", 
"division2", "division2", "division2", "division2", "division2", 
"division2", "division2", "division3", "division3", "division3", 
"division3", "division1", "division1", "division1", "division1", 
"division2", "division2", "division2", "division2", "division2", 
"division1", "division1", "division1", "division1", "division1", 
"division1", "division1", NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "division2", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA), numFunders = c(4, 4, 4, 4, 2, 2, 2, 
2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 2, 2, 2, 1, 1, 2, 
2, 3, 3, 3, 3, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 
0, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 3, 3, 2, 2, 
1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 3, 2, 1, 0, 1), multiFunder = c(TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, 
TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE
), provFunders = c(8, 8, 7, 7, 3, 3, 3, 3, 2, 3, 2, 3, 1, 1, 
1, 1, 5, 2, 2, 1, 2, 1, 3, 3, 3, 2, 2, 3, 3, 5, 5, 5, 5, 3, 1, 
1, 3, 3, 4, 3, 3, 4, 1, 1, 1, 3, 1, 1, 1, 1, 2, 2, 2, 1, 3, 2, 
2, 2, 3, 4, 4, 4, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 
3, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 2, 2, 3, 1, 1, 1, 1, 3, 3, 
3, 4, 3, 3, 3, 5, 1, 1, 1), nonProvFunders = c(3, 4, 4, 4, 0, 
0, 0, 0, 1, 5, 3, 5, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 1, 1, 1, 2, 
4, 3, 3, 2, 2, 3, 3, 1, 0, 0, 0, 0, 3, 4, 4, 4, 0, 0, 0, 0, 0, 
0, 0, 0, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 4, 3, 1, 1, 1, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
3, 2, 4, 1, 1, 2, 1, 2, 2, 0, 0, 0, 1, 3, 3, 0, 0, 2), provFundedOnly = c(FALSE, 
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, 
FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, 
TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, 
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, 
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE), provincialFunding = c(1500, 
1500, 1500, 1500, 1500, 1500, 1500, 1500, 1000, 0, 0, 0, 500, 
500, 500, 500, 1500, 500, 500, 500, 1500, 500, 1500, 1500, 1500, 
0, 0, 1000, 1000, 1500, 1500, 1500, 1500, 1500, 500, 500, 1500, 
1500, 1000, 1000, 1000, 1000, 0, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1500, 1500, 1500, 1500, 0, 0, 500, 500, 500, 
500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 
500, 500, 500, 500, 500, 1500, 1500, 1500, 1500, 500, 500, 0, 
0, 0, 0, 0, 1000, 1000, 500, 500, 500, 500, 1000, 1000, 500, 
0, 0), nonProvincialFunding = c(5500, 5500, 5500, 5500, 0, 0, 
0, 0, 3000, 3000, 3000, 3000, 0, 0, 0, 0, 3000, 0, 0, 0, 3000, 
0, 0, 0, 0, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 0, 
0, 0, 0, 0, 3000, 3000, 3000, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 3000, 
3000, 3000, 0, 0, 0, 0, 0, 0, 0, 3000, 3000, 3000, 3000, 3000, 
3000, 3000, 3000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 5500, 5500, 2500, 2500, 3000, 3000, 3000, 3000, 3000, 3000, 
3000, 3000, 3000, 0, 0, 0, 0, 5500, 2500, 0, 0, 3000), agencySize = c("greater than $15M", 
"greater than $15M", "greater than $15M", "greater than $15M", 
"greater than $15M", "greater than $15M", "greater than $15M", 
"greater than $15M", "less than $1M", "$7M - $15M", "$7M - $15M", 
"$7M - $15M", "$1M - $2M", "$1M - $2M", "$1M - $2M", "$1M - $2M", 
"$2M - $4M", "less than $1M", "less than $1M", "less than $1M", 
"$2M - $4M", "$2M - $4M", "$4M - $7M", "$4M - $7M", "$4M - $7M", 
"$1M - $2M", "$1M - $2M", "$2M - $4M", "$2M - $4M", "$2M - $4M", 
"$2M - $4M", "$4M - $7M", "$4M - $7M", "$2M - $4M", "less than $1M", 
"$1M - $2M", "$2M - $4M", "$2M - $4M", "$2M - $4M", "$2M - $4M", 
"$4M - $7M", "$4M - $7M", "$1M - $2M", "$1M - $2M", "$1M - $2M", 
"less than $1M", "less than $1M", "less than $1M", "less than $1M", 
"less than $1M", "$1M - $2M", "$2M - $4M", "$2M - $4M", "$1M - $2M", 
"less than $1M", "less than $1M", "less than $1M", "less than $1M", 
"$4M - $7M", "$4M - $7M", "$4M - $7M", "$4M - $7M", "greater than $15M", 
"greater than $15M", "$2M - $4M", "$2M - $4M", "$2M - $4M", "$2M - $4M", 
"$1M - $2M", "$1M - $2M", "$1M - $2M", "$1M - $2M", "$2M - $4M", 
"$2M - $4M", "$2M - $4M", "less than $1M", "less than $1M", "less than $1M", 
"less than $1M", "less than $1M", "less than $1M", "$1M - $2M", 
"$1M - $2M", "$7M - $15M", "$7M - $15M", "greater than $15M", 
"greater than $15M", "greater than $15M", "greater than $15M", 
"$1M - $2M", "$1M - $2M", "$2M - $4M", "less than $1M", "less than $1M", 
"less than $1M", "less than $1M", "$1M - $2M", "$1M - $2M", "less than $1M", 
"less than $1M", "less than $1M", "less than $1M", "$2M - $4M", 
"$2M - $4M", "$2M - $4M", "$1M - $2M", "$1M - $2M"), funder1funded = c(TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, 
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE), funder13funded = c(TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, 
TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, 
TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, 
FALSE), funder2funded = c(FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE), funder3funded = c(FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE), funder4funded = c(TRUE, TRUE, 
TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, TRUE, FALSE, FALSE, FALSE), funder5funded = c(TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), sectorFunded = c("TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", 
"TRUE", "TRUE"), totHolder = c(7000, 7000, 7000, 7000, 1500, 
1500, 1500, 1500, 4000, 3000, 3000, 3000, 500, 500, 500, 500, 
4500, 500, 500, 500, 4500, 500, 1500, 1500, 1500, 3000, 3000, 
4000, 4000, 4500, 4500, 4500, 4500, 1500, 500, 500, 1500, 1500, 
4000, 4000, 4000, 4000, 0, 0, 0, 1500, 0, 0, 0, 0, 3000, 3000, 
3000, 0, 0, 0, 0, 0, 1500, 1500, 4500, 4500, 3000, 3000, 3500, 
3500, 3500, 3500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 
500, 500, 500, 500, 500, 500, 500, 500, 7000, 7000, 4000, 4000, 
3500, 3500, 3000, 3000, 3000, 3000, 3000, 4000, 4000, 500, 500, 
500, 500, 6500, 3500, 500, 0, 3000)), row.names = c(NA, -107L
), class = c("tbl_df", "tbl", "data.frame"))

请注意,省级基金是出资人1、2和3的总和,非省级基金是出资人4、5和其他的总和

本例中传递给函数的分组子句为:

GRclauseSDregion <- c("year", "employerClass", "multiFunder", "serviceDivision", "healthRegion")

假设我们正在使用2020-04-01更新的GRsectorRegion,以下是所需输出

“问题是,我需要它吐出的Provvincial资金汇总值,作为所有省级资金的总和;由group子句设置的子集内的资金。因此,当我在聚合的上层运行时,就像是由出资人对整个部门运行一样,它开始给我错误的数字。此外,当我从等式中取出总数时,我无法对整个部门进行计算。”

基于您的评论和通过您的pastebin链接共享的输出,我对此进行了另一次尝试。如果这仍然不能回答您的问题,我可以请您特别分享“正确”的示例吗“回答了更广泛的分组子句数组,因为这样可以更容易地看到方法失败的位置/时间。例如,我不清楚您对“集资者对整个行业的贡献”的预期结果是什么

在显示以下更新的方法之前,有一些注意事项:

  • OP中共享的数据和通过pastebin共享的输出之间似乎存在某种程度的断开。明确地:
    • 似乎用于生成通过pastebin共享的输出的输入数据与OP中共享的数据有所不同
    • pastebin数据包含列
      multiFunded
      ,而不是根据您的操作在
      multiFunded
    • pastebin数据在列下包含一个
      numf,但OP中的
      collapsePassFunderArray()
      函数没有
    • 根据OP中的
      collapsePassFunderArray()
      函数,您的pastebin输出不包含
      medianFounder
    • 您的pastebin输出中
      funderPercProv
      funderPercTot
      列的值让我感到困惑:我假设
      funderPercProv
      应该表示funder
      x
      的总资金占分组条款中省级资金总额的百分比。然而,尽管存在一些情况,例如,在您的示例分组条款中,
      others
      提供的资金总额超过省级资金总额,但您的pastebin数据中的
      FunderPerProv
      值从未超过1。这对我来说似乎不对,但也许我错过了什么。类似地,您的pastebin数据中的
      funderPercTot
      值似乎不符合funder
      x
      在分组条款中占总资金百分比的定义。例如,如果您查看OP中以下过滤器适用的数据:
      filter(year==2015&employeerclass==class1&multifounder==F&healthRegion==Region3')
      ,那么您可以清楚地看到,在分组条款
      (“year”、“EmployeerClass”、“Multifounder”、“healthRegion”)
      。但是,您的pastebin输出报告该值为0.14285714
这些问题使我们很难验证以下内容是否真的满足了您的需求。不过,我们希望它能满足您的需求。我假设上述
funderPercProv
funderPercTot
的定义是您真正需要的

#加载所需的库
图书馆(tidyverse)
#注意:根据OP定义原始输入数据,并存储为对象可重新编程
#首先将数据转换为长格式
可谴责的_long%
选择(-totHolder)%>%
再长一点(
cols=火柴(
“^funder\\d{1,}$|其他$| ^总计$| ^省级资金$|非省级资金”
),
姓名_to=‘出资人’
)
#定义感兴趣的功能
collapsePassFunderArray%
分组依据(.dots=GRsectorRegion)%>%
过滤器(总和(值[funder==FunderVal],na.rm=T)>0)%>%
总结(
funderName=名称,
totFund=总和(值[出资人='总额'],na.rm=T),
minFunder=min(numUnders,na.rm=T),
maxFunder=max(numUnders,na.rm=T),
avgFunder=平均值(numUnders,na.rm=真值),
medianFunder=中间值(numUnders,na.rm=TRUE),
provPerc=sum(值[funder=='provincialFunding'],na.rm=T)/
总和(值[funder='total',na.rm=T),
非ProvPerc=总和(值[出资人='非省级基金'],na.rm=T)/
总和(值[funder='total',na.rm=T),
FUNDERPERPROV=sum(值[funder==FunderVal],na.rm=T)/
总和(值[funder=='provincialFunding'],na.rm=T),
funderPercTot=sum(值[funder==FunderVal],na.rm=T)/
总和(值[funder='total',na.rm=T),
NUMAGENCES=n_distinct(联系人ID),
出资人=出资人[!is.na(值)&!出资人%单位%
GRsectorProfile <- c("year", "employerClass", "multiFunder")
GRclass1SD <- c("year", "employerClass", "multiFunder", "serviceDivision")
GRsectorRegion <- c("year", "employerClass", "multiFunder", "healthRegion")
GRclass1SDregion <- c("year", "employerClass", "multiFunder", "serviceDivision", "healthRegion")
GRsectorAgencySize <- c("year", "employerClass", "multiFunder", "agencySize")
GRclass1AgencySize <- c("year","employerClass", "multiFunder", "agencySize")
GRclass1SDagencySize <- c("year", "employerClass", "multiFunder", "serviceDivision", "agencySize")
GRclass1SDregionAgencySize <- c("year", "employerClass", "multiFunder", "serviceDivision", "healthRegion", "agencySize")
GRnonCLASS1AregionAgencySize <- c("year", "employerClass", "multiFunder", "healthRegion", "agencySize")
GRclass1RegionAgencySize <- c("year", "employerClass", "multiFunder", "healthRegion", "agencySize")
# collapse function (funder)
collapsePassFunderArray <- function(df, funderTrueCol, fundingCol, groupClause, name) {
  funderTrueHolder <- enquo(funderTrueCol)
  fundingColHolder <- enquo(fundingCol)
  newDf <- df %>% 
    filter((!!funderTrueHolder) == TRUE) %>% 
    group_by(.dots = groupClause) %>% 
    summarise(funderName = name, 
              totFund = sum(total),
              minFunder = min(numFunders),
              maxFunder = max(numFunders),
              avgFunder = mean(numFunders, na.rm = TRUE),
              medianFunder = median(numFunders, na.rm = TRUE),
              provPerc = sum(provincialFunding)/sum(total),
              nonProvPerc = sum(nonProvincialFunding)/sum(total),
              funderPercProv = sum((!!fundingColHolder))/sum(provincialFunding),
              funderPercTot = sum((!!fundingColHolder))/sum(total),
              numAgencies = n_distinct(contactID),
              funders = simplify2array(apply(df[8:13], 1, 
                                            function(x)paste(names(df[6:11]) [which(!is.na(x))], collapse = " ")))
    )
}
reproTable$funders <- simplify2array(apply(reproTable[6:11], 1, 
                                           function(x)paste(names(reproTable[8:13]) [which(!is.na(x))], collapse = " ")))
test1 <- collapsePassFunderArray(reproTable, funder1funded, funder1, GRclauseSDregion, "All")
Error: Column `funders` must be length 1 (a summary value), not 107 
https://pastebin.com/1Z8vRLir
library(dplyr)
library(stringr)
library(purrr)
collapsePassFunderArray <- function(df, funderTrueCol, 
                   fundingCol, groupClause, name) {
  funderTrueHolder <- enquo(funderTrueCol)
  fundingColHolder <- enquo(fundingCol)
  df %>% 
    filter((!!funderTrueHolder) == TRUE) %>% 
    mutate(funder = pmap_chr(select(., matches("^(funder\\d+$)|(^others$)")),
       ~ {x1 <- c(...)
         str_c(names(x1)[!is.na(x1)], collapse=" ")
         }))  %>%
    group_by_at(vars(intersect(groupClause, names(.)), 'funder')) %>%
    summarise(funderName = name, 
              totFund = sum(total),
              minFunder = min(numFunders),
              maxFunder = max(numFunders),
              avgFunder = mean(numFunders, na.rm = TRUE),
              medianFunder = median(numFunders, na.rm = TRUE),
              provPerc = sum(provincialFunding)/sum(total),
              nonProvPerc = sum(nonProvincialFunding)/sum(total),
              funderPercProv = sum((!!fundingColHolder))/sum(provincialFunding),
              funderPercTot = sum((!!fundingColHolder))/sum(total),
              numAgencies = n_distinct(contactID))




    }
test1 <- collapsePassFunderArray(reproTable, funder1funded, funder1, GRclauseSDregion, "All")
test1$funder
#[1] "funder1 funder3 funder5 others"  "funder1 funder3 funder4 funder5" "funder1 funder3 funder4 funder5"
#[4] "funder1 funder3 funder5"

test2 <- collapsePassFunderArray(reproTable, funder2funded, funder2, GRclauseSDregion, "All")
test2$funder
#[1] "funder2 funder4"        "funder2 funder4 others" "funder2 funder4 others"
testothers <- collapsePassFunderArray(reproTable, otherFunded, others, GRclauseSDregion, "All")
testothers$funder
#[1] "funder1 funder3 funder5 others" "funder2 funder4 others"         "funder2 funder4 others"