我有一个数据框,数据如下(虽然我的数据集要大得多)
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
我已经尝试过如何最好地做到这一点,并且我确信它非常简单,但我正在努力实现这一目标......任何帮助都会非常感谢!
答案 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)
这只是基于你已经做过的事情,但不是我想的最好的事情......