【问题标题】:Keep all rows of a group when all specific columns are non-zero in R当 R 中的所有特定列均非零时,保留组的所有行
【发布时间】:2021-02-12 17:51:31
【问题描述】:

我有一个州级数据框,其中包含价格(以 p 为前缀)和股票(以 w 为前缀)。我要运行的模型要求价格和份额列中的所有值都非零。我想为每个州运行模型,因此我需要过滤掉价格或份额列中至少有一个零的州。

我试过了,但它会过滤掉具有零值列的行:

ex_data %>%
  group_by(state_code) %>%
  filter_at(vars(starts_with(c("w", "p"))), all_vars(. != 0))

这是我的数据:

    structure(list(state_code = c("CA", "CA", "CA", "CA", "CA", "CA", 
"CA", "CA", "CA", "CA", "CA", "FL", "FL", "FL", "FL", "FL", "FL", 
"FL", "FL", "FL", "FL", "FL", "NE", "NE", "NE", "NE", "NE", "NE", 
"NE", "NE", "NE", "NE", "NE", "TX", "TX", "TX", "TX", "TX", "TX", 
"TX", "TX", "TX", "TX", "TX"), year = c(1970, 1971, 1972, 1973, 
1974, 1975, 1976, 1977, 1978, 1979, 1980, 1970, 1971, 1972, 1973, 
1974, 1975, 1976, 1977, 1978, 1979, 1980, 1970, 1971, 1972, 1973, 
1974, 1975, 1976, 1977, 1978, 1979, 1980, 1970, 1971, 1972, 1973, 
1974, 1975, 1976, 1977, 1978, 1979, 1980), xEnergy = c(4783.64707043592, 
4965.72564535305, 5217.80954136294, 5892.52447296696, 7791.16559890171, 
8571.49087613565, 9590.00697384999, 11289.4044046784, 11196.0711733067, 
13194.6667121871, 15927.7836117326, 1270.44955699622, 1356.4460242475, 
1439.6678875137, 1653.02277395354, 2213.70665480426, 2535.11517051505, 
2859.94400604424, 3131.30986642955, 3227.89333805102, 4053.59462062275, 
5229.16571547839, 470.12230302944, 497.347399822272, 496.757381373641, 
499.955769758045, 753.645208701595, 854.155293637597, 1009.4744183, 
985.501778058931, 1016.17152062964, 1143.70089661029, 1268.743844453, 
8282.08966310954, 8855.39878592996, 9594.84560827013, 11303.1373544858, 
18281.2448910969, 17950.5669173938, 22239.6111176689, 26019.1598960144, 
28466.6720706321, 37332.1611821657, 48099.2975338677), wCoal = c(0.0274409700063816, 
0.0232104544567973, 0.0217101165584127, 0.0303233998058107, 0.0404642246515725, 
0.0321676512440171, 0.0347711749881296, 0.0322533524204622, 0.0295931288883995, 
0.0249687351761611, 0.0207043407043407, 0, 0, 0, 0, 0, 0.000437381542498907, 
0.000734843845682792, 0.00463450600379187, 0.00907094433304688, 
0.00968556990454801, 0.0150676046500025, 0.00865800865800866, 
0.0155793573515093, 0.00934579439252337, 0.0132042253521127, 
0.0192822710230316, 0.0207702293379489, 0.0416377515614157, 0.0411646586345382, 
0.0479223536548377, 0.0432835820895522, 0.0178901912399753, 0.00724904779456936, 
0.00585147107076452, 0.00677408428896308, 0.0175991901257641, 
0.0170022964140611, 0.0192105750818457, 0.0177657379553652, 0.0119661803293235, 
0.0134580613029309, 0.0133212415884895, 0.00438812981053477), 
    wElectricity = c(0.417145288236545, 0.41535010727521, 0.434825162380995, 
    0.415116886996788, 0.401637220869385, 0.426415419774913, 
    0.431717739873626, 0.441993631131497, 0.487584650112867, 
    0.405537108111605, 0.427141687141687, 0.455346415698839, 
    0.433059621563727, 0.465333763302161, 0.456070287539936, 
    0.398796498905908, 0.500656072313748, 0.504837721984078, 
    0.473772909205814, 0.511887711257519, 0.434236384053902, 
    0.423389712118944, 0.270562770562771, 0.259980525803311, 
    0.250467289719626, 0.272887323943662, 0.19925013390466, 0.233665080051926, 
    0.243580846634282, 0.24665327978581, 0.255383682135274, 0.243781094527363, 
    0.252930289944479, 0.193205553507802, 0.17718473148857, 0.17985193787197, 
    0.170930187283417, 0.129659070835541, 0.164350278996026, 
    0.170632983163498, 0.181812419982507, 0.180714803867433, 
    0.156402655103301, 0.130271586723873), wNatGas = c(0.222612210168049, 
    0.220304271503803, 0.217457069134265, 0.211815669579506, 
    0.187451427387182, 0.232676469319995, 0.239015303699916, 
    0.254988460077712, 0.198645598194131, 0.207619992237699, 
    0.204537264537265, 0.143372046455747, 0.153873616565512, 
    0.138342470170913, 0.14776357827476, 0.12472647702407, 0.12407056422219, 
    0.127372933251684, 0.119970507689067, 0.10961520099303, 0.168304323413812, 
    0.129521528713266, 0.183982683982684, 0.190847127555988, 
    0.247663551401869, 0.268485915492958, 0.19925013390466, 0.212894850713977, 
    0.186675919500347, 0.203815261044177, 0.169548074006673, 
    0.152487562189055, 0.207896360271437, 0.158680427570955, 
    0.186372087936126, 0.158803890259834, 0.174551259588054, 
    0.149598127539304, 0.171906850330471, 0.188193974138881, 
    0.152264574275248, 0.215144920475092, 0.121156234996456, 
    0.154078140170643), wPetroleum = c(0.280472239948947, 0.292178661985567, 
    0.277070913782365, 0.300022406453058, 0.339723330397389, 
    0.285800526066146, 0.272033310201249, 0.252242250723071, 
    0.265952761107747, 0.347406097718746, 0.342850122850123, 
    0.329995995194233, 0.350232059978579, 0.333440825540148, 
    0.342651757188498, 0.443471918307805, 0.350488409389124, 
    0.344029393753827, 0.380556140720455, 0.348133295139884, 
    0.37106962380685, 0.424138103078381, 0.535714285714286, 0.531645569620253, 
    0.488785046728972, 0.441021126760563, 0.580074986609534, 
    0.53093898745132, 0.526370575988897, 0.506358768406961, 0.525022747952684, 
    0.558706467661692, 0.521283158544109, 0.631834377687677, 
    0.622716832549492, 0.646392800116127, 0.630144453529572, 
    0.69998675145734, 0.64134082813433, 0.620525097254816, 0.651434293754516, 
    0.588311083682507, 0.707435660994216, 0.710584125709884), 
    wWoodWaste = c(0.0523292916400766, 0.048956504778623, 0.048936738143963, 
    0.0427216371648368, 0.0307237966944718, 0.0229399335949291, 
    0.0224624712370795, 0.0185223056472582, 0.0182238616968562, 
    0.0144680667557894, 0.00476658476658477, 0.0712855426511814, 
    0.0628347018921814, 0.0628829409867784, 0.0535143769968051, 
    0.0330051057622174, 0.0243475725324391, 0.0230251071647275, 
    0.0210659363808721, 0.0212928482765206, 0.0167040988208871, 
    0.00788305143940528, 0.00108225108225108, 0.00194741966893866, 
    0.00373831775700935, 0.00440140845070422, 0.00214247455811462, 
    0.00173085244482908, 0.00173490631505899, 0.00200803212851406, 
    0.00212314225053079, 0.00174129353233831, 0, 0.00903059343899742, 
    0.00787487695504758, 0.00817728746310543, 0.00677490947319238, 
    0.00375375375375375, 0.00319146745732699, 0.00288220748743956, 
    0.00252253165840611, 0.0023711306720369, 0.00168420731753786, 
    0.000678017585064086), pCoal = c(2.18779859634912, 2.27607865546707, 
    2.41414802162891, 2.6846216509895, 5.20729683569929, 4.8787753682459, 
    5.00884253354961, 4.84835212097265, 4.90055419411927, 4.80809580913282, 
    4.98313950833893, 0, 0, 0, 0, 0, 1.95890223118964, 4.16819763281401, 
    4.51853224879764, 4.77726981187728, 4.60894391171312, 4.61788320929838, 
    0.814064593990372, 1.98551542285425, 1.021370316843, 1.05624458399587, 
    2.30089860182062, 2.99379397596907, 3.60776769899028, 3.85889250444762, 
    4.53070104739329, 4.89344662231269, 4.40916532413235, 1.93340341072713, 
    2.17922424459613, 2.69270356258609, 3.34477451598692, 5.16693019356209, 
    4.435250334769, 6.26980988465301, 5.57395583975767, 6.25668239878121, 
    5.94610665153112, 3.33948616265646), pElectricity = c(14.7549207660755, 
    14.6734432469473, 15.320554752645, 16.5038216249355, 23.170452586755, 
    24.7634810357936, 26.6904755983553, 31.200959907756, 33.132677727536, 
    31.1814970817134, 41.8479359757887, 18.1129372162858, 17.4822211622045, 
    18.4775175501597, 18.9683923209258, 24.3007185665967, 27.9790375285011, 
    29.7027864926578, 27.7708332371359, 28.0471969600537, 28.7632240416171, 
    34.9080662940183, 17.4006306965442, 17.2885123404626, 17.4561472333167, 
    17.384025444932, 16.9539896976256, 18.3323680503785, 20.4206657137023, 
    19.8551563049356, 20.1569964965661, 20.11434163939, 22.7241597474514, 
    12.770638318224, 12.0099469479964, 12.0707401081445, 12.542904434951, 
    14.854924306491, 17.3713971445119, 20.2805582302463, 22.1968773973782, 
    22.7459685236479, 24.2111806720239, 26.0636459101078), pNatGas = c(1.93340341072713, 
    2.03394262828972, 2.08916655717886, 2.24451974099122, 2.62383173891825, 
    3.88084404292287, 4.86873505009368, 6.13464962245519, 6.28750349434171, 
    7.42552074664891, 9.4966637750543, 1.88252437360273, 2.03394262828972, 
    2.18201840416459, 2.42056050499054, 2.82566494960427, 3.51123984835879, 
    3.50268708639833, 3.52907263227261, 3.42114160721534, 5.83230556729129, 
    6.80942100354168, 1.62812918798074, 1.7433793956769, 2.22844432765745, 
    1.8924382129926, 2.17979867540901, 2.55026894249217, 2.97728402343858, 
    3.36416269618511, 3.42114160721534, 3.58473415355465, 5.76583157771154, 
    1.01758074248796, 1.16225293045127, 1.16064808732159, 1.32030572999484, 
    2.05869874899739, 3.40035858998957, 4.44841259972588, 4.05678442775263, 
    5.73272377425274, 5.23484987503218, 5.8441007846488), pPetroleum = c(4.93526660106663, 
    5.23013818703071, 5.15327750770786, 5.72132482997763, 9.04212783873365, 
    8.68569857225596, 8.68666397426786, 8.97110052316028, 8.7531911391816, 
    10.8964538159637, 13.9840983061239, 3.45977452445908, 3.77732202396662, 
    3.66764795593623, 3.82888661698503, 7.38709551110829, 7.9834506025842, 
    7.60083097748438, 7.84971295776525, 7.64363169900365, 9.38858944978598, 
    12.0012783970466, 6.46163771479858, 6.63452714465933, 6.128221901058, 
    6.02939616697642, 10.3742270292614, 10.9402841590969, 10.6131418717869, 
    10.3233619990778, 9.92439277048054, 11.2094067976233, 15.5233927092234, 
    5.03702467531542, 5.13328377615977, 4.96757381373641, 5.28122291997935, 
    9.52652754438009, 9.46186738084053, 9.87757758364329, 10.4882719351653, 
    9.64700291043605, 12.8595225191008, 16.7496102845738), pWoodWaste = c(7.83537171715733, 
    7.45778963706231, 7.149592217901, 6.7775694139735, 6.21646288912939, 
    5.69190459628688, 5.39413811305343, 5.07922603149516, 4.74644871631678, 
    4.38134174323346, 3.93955008250879, 11.0916300931188, 10.5571307849324, 
    10.1208513214443, 9.59422163796249, 8.79992798591043, 8.05737144149702, 
    7.63585784834836, 7.19007321341523, 6.71899883218869, 6.20215909107074, 
    5.34839580737948, 7.32658134591334, 6.97351758270761, 6.68533298297236, 
    6.33746750397522, 5.81279646775735, 5.3223004017228, 5.04386940441359, 
    4.74940615932015, 4.43823776071179, 4.09683903263388, 7.82692069372607, 
    8.85295245964529, 8.4263337457717, 8.07811068775827, 7.65777323397006, 
    7.02379573187346, 6.43111298541505, 6.0946755303331, 5.73886577584518, 
    5.36287062752675, 4.95034716443261, 4.3830755884866)), row.names = c(NA, 
-44L), class = "data.frame")

【问题讨论】:

    标签: r filter group-by


    【解决方案1】:

    我将首先确定需要删除的状态(并将名称存储在向量中),然后从数据中排除这些状态。使用这种方法 FLNE 被排除在外。

    exclude_states <- ex_data %>%
      group_by(state_code) %>%
      filter_at(vars(starts_with(c("w", "p"))), any_vars(. == 0)) %>%
      pull(state_code) %>%
      unique()
    
    
    ex_data %>%
      filter(! (state_code %in% exclude_states))
    

    【讨论】:

    • 感谢您的解决方案。
    猜你喜欢
    • 2020-03-30
    • 2011-06-12
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2019-06-30
    • 2015-04-26
    • 2018-01-05
    • 2018-10-18
    相关资源
    最近更新 更多