提高dplyr汇总的效率
我正在尝试从一个大数据集(>60k;NDw)排序并生成一个新表,这里有一个示例提高dplyr汇总的效率,r,performance,dplyr,R,Performance,Dplyr,我正在尝试从一个大数据集(>60k;NDw)排序并生成一个新表,这里有一个示例 Season ENo HNo Month Day Year Group 638447 2011 A903851 1881023 10 6 2011 Ducks 589219 2010 C409324 3648019 10 8 2010 Ducks 137451 2006 M576033 2506116 10 13 2006 Ducks 88
Season ENo HNo Month Day Year Group
638447 2011 A903851 1881023 10 6 2011 Ducks
589219 2010 C409324 3648019 10 8 2010 Ducks
137451 2006 M576033 2506116 10 13 2006 Ducks
883040 2013 P886755 43313010 10 17 2013 Ducks
851378 2013 C700399 36413199 11 5 2013 Geese
552791 2010 M902312 2508141 11 16 2010 Ducks
152368 2006 M599973 2496101 10 3 2006 Ducks
395393 2008 C412049 3646096 10 28 2008 Ducks
857709 2013 C671619 36413012 9 15 2013 Ducks
67354 2005 C349762 3643011 10 22 2005 Geese
67126 2005 C427496 3643037 11 25 2005 Geese
62260 2005 C349776 3643023 10 7 2005 Ducks
847364 2013 C570491 36411001 10 5 2013 Ducks
447414 2009 A686943 1808206 11 3 2009 Geese
474743 2009 M813353 2509214 10 24 2009 Ducks
439477 2009 A746048 1639142 10 26 2009 Ducks
781218 2012 P792862 4142177 11 27 2012 Geese
806946 2013 M052893 20712036 11 5 2013 Ducks
174932 2006 C450351 3645098 12 5 2006 Geese
828816 2013 M054683 25012010 9 30 2013 Ducks
我想按季节和HNo分组,得到一些新的变量。其中包括每个季节/HNo所处的组数、每个组的行总数、每个月的组数。结果看起来是这样的,但是在所有的月份里
Season HNo groupN total.envelopes ducks geese Octducks
1 2005 1253041 1 2 2 0 2
2 2005 1254026 1 5 5 0 5
3 2005 1254063 2 26 23 3 0
4 2005 1254115 2 14 10 4 10
5 2005 1274023 2 39 28 11 28
我有可以工作的代码,但运行速度很慢,我觉得应该有更好的方法来编写这个代码块。也许我错了,这不是一个大问题,只是想学习如何使我的代码更有效率。下面是我用来获取上述输出的内容
NDw1 = NDw %>%
group_by(Season,HNo) %>%
summarise(groupN = n_distinct(Group),
total.envelopes=n(),
ducks = length(ENo[Group %in% 'Ducks']),
geese = length(ENo[Group %in% 'Geese']),
Octducks = length(ENo[Group=='Ducks' & Month == 10]))
整个代码中有一行表示鸭子和鹅。我尝试使用count而不是length,但它不能像ENo那样使用因子变量。如有任何想法,将不胜感激。感谢您的时间和帮助。您可以通过设置
ducks=sum(Group='ducks')
,geese=sum(Group='geese')
,octcducks=sum(Group='ducks'&Month==10)
中的似乎最好是按季节、月份、小组分组
如果您每个月都需要。另一个分组是groupby(seasure,ENo,group)
和than组合结果是的,使用sum比length快得多。我想我先尝试了sum,但没能让它工作,但我确信当时我还有其他错误。谢谢。您的变量“Group”是什么?如果是字符串,这可能会导致性能的巨大滞后。它应该是一个因子(即内存中的整数)。另一个想法是使用多个步骤和cbind()
组合。看起来您在前两行中做了非常不同的事情groupN,total.envelopes
vsducks,gees,Octducks
。为什么不把台阶分开?