以下是一个玩具问题,可以解释我的问题.
我有一个包含大量员工的数据框; 对于每个员工,它有一个名称,工资,性别和州.
aggregate(salary ~ state) # Returns the average salary per state
aggregate(salary ~ state + gender, data, FUN = mean) # Avg salary per state/gender
Run Code Online (Sandbox Code Playgroud)
我实际需要的是每个州妇女所获总薪水的比例摘要.
aggregate(salary ~ state + gender, data, FUN = sum)
Run Code Online (Sandbox Code Playgroud)
返回每个州的女性(和男性)所获得的总薪水,但我真正需要的是每州一级的salary_w/salary_total.我可以写一个for循环等 - 但我想知道是否有一些方法可以使用聚合来做到这一点.
无法在Oracle PIVOT子句中使用用户定义的聚合函数.
我创建了一个名为string_agg的用户定义聚合函数.
我可以在一个简单的声明中使用它,例如......
select id, string_agg(value) from
(
select 'user1' as id, 'BMW' as value, 'CAR' as type from dual union
select 'user1' as id, 'Audi' as value, 'CAR' as type from dual union
select 'user2' as id, 'Honda' as value, 'CAR' as type from dual union
select 'user1' as id, 'Dell' as value, 'COMPUTER' as type from dual union
select 'user1' as id, 'Sony' as value, 'COMPUTER' as type from dual union
select 'user2' as id, 'HP' as …Run Code Online (Sandbox Code Playgroud) 我有一个2列数据框的x和y坐标点.我想生成一个表中每个点的出现次数.使用该table()命令可为所有可能的xy对生成一个表.我可以消除额外的东西
fullTable <- table(coords)
smalLTable <- subset(fullTable, fullTable > 0)
Run Code Online (Sandbox Code Playgroud)
然后我确信我可以用一些东西dimnames(fullTable)来获得适当的坐标,但是有更好的方法吗?内置的东西?与之相关的东西
coords <- data.frame(x = c(1, 1, 2, 2, 3, 3), y = c(1, 1, 2, 1, 1, 1))
Run Code Online (Sandbox Code Playgroud)
会回来的
x y count
1 1 2
2 1 1
2 2 1
3 1 2
Run Code Online (Sandbox Code Playgroud) 我一直在努力解决这个问题.我是使用ts数据和所有相关R包的新手.我有一个带有几个变量的df,包括GMT"%H%M"中的"一天中的时间"和日期"%Y /%m /%e"采样.我想将我的日期数据分箱/汇总到"周"(即%W /%g),并计算在该周内进行抽样时的平均'当天时间'.
我能够通过首先将我的df转换为zoo对象然后使用aggregate.zoo命令来计算数值变量(例如,权重)的其他FUN,如下所示:
#calculate the sum weight captured every week
x2c <- aggregate(OA_zoo, as.Date(cut(time(OA_zoo), "week")), sum)
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何解决这个事实,即我正在使用Date格式而不是num,并且会感谢任何提示!此外,我显然已经通过单独执行每个变量来编写方法.是否有办法通过使用plyr聚合"每周"来对我的df应用不同的FUN(sum/mean/max/min)?还是其他一些套餐?
编辑/澄清
这dput是我的完整数据集样本的输出.我有2004 - 2011年的数据.我想看一下/使用ggplot2进行绘图是指随着时间的推移(2004-2011)累计的TIME(%H%M)的平均值/中位数.现在,我的数据不会在一周内汇总,而是每天汇总(随机抽样).
> dput(godin)
structure(list(depth = c(878, 1200, 1170, 936, 942, 964, 951,
953, 911, 969, 960, 987, 991, 997, 1024, 978, 1024, 951, 984,
931, 1006, 929, 973, 986, 935, 989, 1042, 1015, 914, 984), duration = c(0.8,
2.6, 6.5, 3.2, 4.1, 6.4, 7.2, 5.3, 7.4, 7, 7, 5.5, 7.5, …Run Code Online (Sandbox Code Playgroud) 下面是我原始数据框的一小部分.我需要那些在特定的行合并id是在特定的季节重复和lic和vessel是不同的.通过结合我需要总和qtty和grossTon.
请以id 431中的season 1998为例(*).
season lic id qtty vessel grossTon
…
1998 16350 431 40 435 57
1998 16353 431 28 303 22.54
…
Run Code Online (Sandbox Code Playgroud)
同一主题431有两种不同的lic(16350和16353)和两种不同的vessels(435和303).在这个特定情况下预期的结果是:
season lic id qtty vessel grossTon
…
1998 16350 431 68 435 79.54
…
Run Code Online (Sandbox Code Playgroud)
我不介意它lic和vessel生成的行中提醒,我要的是保持season,id并将得到的总和qtty和grossTon.在上面的示例中,我手动选择lic 16350和vessel 435.
说实话,我不知道该怎么做,所以我非常感谢任何帮助.
谢谢 …
我正在处理一系列TRUE和FALSE序列,这些序列按组进行组织并延伸一段时间(例如几天).下面,我花时间重新创建一个示例并将其data.frame转换为data.table使用该data.table包.
> dput(df)
structure(list(day = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L,
4L, 5L, 6L, 7L), group = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"),
condition = structure(c(1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L,
2L, 1L, 1L, 2L, 2L), .Label = c("FALSE", "TRUE"), class = "factor")), .Names = c("day",
"group", "condition"), row.names = c(NA, -14L), …Run Code Online (Sandbox Code Playgroud) 例如,对于任何给定的集合Map,
val in = Array( Map("a" -> 1, "b" -> 2),
Map("a" -> 11, "c" -> 4),
Map("b" -> 7, "c" -> 10))
Run Code Online (Sandbox Code Playgroud)
如何使用aggregate上in.par,从而地图合并成
Map ( "a" -> 12, "b" -> 9, "c" -> 14 )
Run Code Online (Sandbox Code Playgroud)
注意Map合并已被多次询问,但寻找aggregate并行集合的解决方案.
非常感谢
我读了Eric Evan的关于DDD的书,聚合章节.
在处理Order/OrderLine示例时,声明:
当两个用户都保存了更改时,订单将存储在数据库中,违反了域模型的不变量.一项重要的商业规则已被打破.甚至没有人知道.显然,锁定单个项目不是一个充分的保障措施.相反,如果我们一次锁定整个订单,则问题就会被阻止.
我很清楚Aggregate的本质是用单个包装的数据库事务来保护不变量.
但是,是否应该在数据库端使用读锁定指定每个聚合,以防止潜在的并发问题(竞争条件),同时由多个用户同时修改此聚合?
制作聚合的真正含义是为数据库端的读锁收集一些元素吗?
对此的任何澄清都会让我感到高兴.
我有一个像这样的矩阵
P A B C
1 2 0 5
2 1 1 3
3 0 4 7
1 1 1 0
3 1 1 0
3 0 2 1
2 3 3 4
Run Code Online (Sandbox Code Playgroud)
我想按P和每个列合并/排序行.因此,每个P值为每列一次,并且每列中每个P的值相加.结果应该是:
P A B C
1 3 0 0
1 0 1 0
1 0 0 5
2 4 0 0
2 0 4 0
2 0 0 7
3 1 0 0
3 0 7 0
3 0 0 8
Run Code Online (Sandbox Code Playgroud)
我已经尝试了,aggregate但它只能帮助我总结所有列的每个P值,以便每个P只有一行.
在C++ 14(gcc 6.3)中,我有以下代码:
#include <memory>
#include <vector>
#include <stdexcept>
struct A
{
int a1;
int a2;
};
struct B
{
int b1;
std::shared_ptr< std::vector<A> > Alist;
};
struct C
{
std::shared_ptr<B> b;
std::shared_ptr< std::vector<A> > Alist;
};
std::shared_ptr< std::vector<A> > makeListA()
{
std::vector<A> toto = {{0,1}, {2,3}};
return std::make_shared< std::vector<A> >(toto);
}
std::shared_ptr< std::vector<A> > makeListAWithException()
{
throw std::out_of_range("My exception");
}
std::shared_ptr<B> makeB()
{
return std::make_shared<B>(B{0, makeListA()});
}
main()
{
std::make_unique<C>(C{makeB(),makeListAWithException()});
}
Run Code Online (Sandbox Code Playgroud)
当运行valgrind时,我有一个内存泄漏:它看起来像"makeB()"函数创建的对象没有被释放.我只有在使用花括号的聚合初始化时才遇到这个问题.
当我在每个类(A,B和C)上定义显式构造函数时,我没有这个问题.
我究竟做错了什么 ?
最好的祝福
aggregate ×10
r ×6
c++ ×1
c++14 ×1
concurrency ×1
data.table ×1
database ×1
dataframe ×1
exception ×1
map ×1
oracle ×1
pivot ×1
scala ×1
time-series ×1
user-defined ×1
valgrind ×1