根据关联数值变量

时间:2015-11-17 17:34:51

标签: r dataframe cbind

我有一个数据框,数据如下(虽然我的数据集要大得多)

ID  Count  Size
1   1      35
1   2      42
1   2      56
2   3      25
2   5      52
2   2      62

等...

我想提取每个ID的总计数,但是当size变量大于&lt; 50或<= 50

时会分开

到目前为止,我已经这样做了根据唯一ID

获取累积计数
cbind(aggregate(Count~ID, sum, data=df)

制作本

ID Count
1  5
2  10

但我想生产这样的东西

ID  <50  >=50
1   3    2
2   3    7

我已经尝试过如何最好地做到这一点,并且我确信它非常简单,但我正在努力实现这一目标......任何帮助都会非常感谢!

2 个答案:

答案 0 :(得分:1)

我们可以使用@Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(); resolver.setFallbackPageable(new PageRequest(0, 1000)); argumentResolvers.add(resolver); super.addArgumentResolvers(argumentResolvers); } 。转换&#39; data.frame&#39;到&#39; data.table&#39; (data.table),按ID&#39;分组,我们得到setDT(df1)&#39; Count&#39;基于逻辑索引(&#39;大小&lt; 50 sum大小&gt; = 50`)

,

library(data.table) setDT(df1)[,list(`<50` = sum(Count[Size <50]), `>=50` = sum(Count[Size>=50])) , by = ID] # ID <50 >=50 #1: 1 3 2 #2: 2 3 7 的类似选项是

dplyr

注意:最好将列命名为library(dplyr) df1 %>% group_by(ID) %>% summarise(`<50` = sum(Count[Size <50]), `>=50` = sum(Count[Size>=50])) less50,而不是预期输出中建议的名称。

答案 1 :(得分:0)

继续您的想法,您实际上aggregate可以df[df$Size<50,]而不是df,然后再次为&gt; = 50然后合并。

d1 = aggregate(Count~ID,sum,data=df[df$Size<50,])
d2 = aggregate(Count~ID,sum,data=df[df$Size>=50,])
merge(d1,d2,by="ID",all=TRUE)

这只是基于你已经做过的事情,但不是我想的最好的事情......