我在让R aggregate()函数以我想要的格式返回data.frame时遇到麻烦。
基本上我像这样运行聚合:
aggregate(df$res, list(full$depth), summary)
Run Code Online (Sandbox Code Playgroud)
其中res列包含TRUE,FALSE和NA。我想res根据中的组计算每个值的出现次数,这些组depth是六个数字深度值0、5、15、30、60和100。根据聚合函数上的帮助页面,它会强制按值的因素,所以这应该不是问题(据我所知)。
因此,我运行了聚合函数并将其存储在data.frame中。这可以; 它运行没有错误。R控制台中显示的摘要如下所示:
Group.1 x.Mode x.FALSE x.TRUE x.NA's
1 0 logical 3 83 0
2 5 logical 3 83 0
3 15 logical 8 78 0
4 30 logical 5 79 2
5 60 logical 1 64 21
6 100 logical 1 24 61
Run Code Online (Sandbox Code Playgroud)
同样,这很好,看起来像我想要的。但是包含结果的data.frame实际上只有两列,看起来像这样:
Group.1 x
1 0 logical
2 5 logical
3 15 …Run Code Online (Sandbox Code Playgroud) 我有这张桌子messages;
sender_id recipient_id
1 2
1 3
1 3
2 1
3 1
2 3
Run Code Online (Sandbox Code Playgroud)
我希望选择以下行:
sender_id或.receiver_idcurrent_user.id即我想从表中选择唯一的sender_id = 2或者recipient_id = 2我需要这个结果:
sender_id recipient_id
2 1
2 3
Run Code Online (Sandbox Code Playgroud)
怎么做?
为什么?因为我希望建立一个类似于Facebook的收件箱,其中汇总了已发送和已接收的邮件,此查询是目前为止的瓶颈.
我使用的是rails 3.2和Postgres 9.3.
我正在处理用户可以选择他/她想要在屏幕上看到的列以及要分组或聚合的列的应用程序.因此,在我的LINQ部分中,我实际上应该将包含列名的变量传递给group by和aggregate子句.请记住,DataTable dt每次可能包含不同的数据(例如员工信息,采购订单,绩效统计等).我只能通过dt.Columns[i].ColumnName和运行时获取有关数据的信息dt.Columns[i].DataType.Name.任何人都可以建议如何做到这一点,我需要的是这样的事情:
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
var query = from row in dt.AsEnumerable()
group row by new
{
foreach(DataColumn column in dt.Columns)
{
row[column.ColumnName];
}
} into grp
select new
{
foreach(DataColumn column in dt.Columns)
{
if(column.DataType.Name == "Decimal")
{
Sum(grp[column.ColumnName]);
}else{
grp[column.ColumnName];
}
}
};
Run Code Online (Sandbox Code Playgroud) 我有一个int值的排序列表,我想组相邻的值.下一个值为nextvalue> = prevValue + 1的值是邻居.
例如:列表:
{1,2,3,5,6,8,9,10}
Run Code Online (Sandbox Code Playgroud)
团体将是:
{1,2,3}
{5,6}
{8,9,10}
Run Code Online (Sandbox Code Playgroud)
这可以用linq完成吗?
这可以很容易地在没有linq的情况下完成 - 通过迭代列表,但我想知道linq是否有解决方案.
在域驱动设计中,如果我想使用存储库,我需要有一个聚合 - 据我所知.
所以我有一个用户,有id,登录,电子邮件和密码.用户是具有唯一ID的域实体.
当我想添加一个User to User存储库时,我是否应该首先构建一个只有Aggregate Root的聚合,这是我的用户实体,仅此而已?在这种情况下,它看起来像User的代理,不需要的层.
或许我在这里错过了什么?也许用户不是一个实体,即使它看起来像这样.或者我可以将实体直接放到存储库中?
entity domain-driven-design aggregate ddd-repositories aggregateroot
我的数据,
Id|date1|date2
1|2008-10-01|NA
1|NA|2008-10-02
1|NA|2008-10-03
2|2008-10-02|NA
2|NA|2008-10-03
Run Code Online (Sandbox Code Playgroud)
我想用这种方式输出,
Id|date1|date2|date3
1|2008-10-01|2008-10-02|2008-10-03
2|2008-10-02|2008-10-03
Run Code Online (Sandbox Code Playgroud)
我尝试使用聚合和dcast,但他们将日期转换为数字格式,并且仍然无法避免使用na.
我使用聚合函数来获得因子级别的范围.我正在尝试重命名列,但聚合函数的输出没有min和max作为单独的列.
# example data
size_cor <- data.frame(SpCode = rep(c(200, 400, 401), 3),
Length = c(45, 23, 56, 89, 52, 85, 56, 45, 78))
# aggregate function
spcode_range <- with(size_cor, aggregate(Length, list(SpCode), FUN = range))
Run Code Online (Sandbox Code Playgroud)
输出:
spcode_range
Group.1 x.1 x.2
1 200 45 89
2 400 23 52
3 401 56 85
Run Code Online (Sandbox Code Playgroud)
数据结构:
str(spcode_range)
'data.frame': 3 obs. of 2 variables:
$ Group.1: num 200 400 401
$ x : num [1:3, 1:2] 45 23 56 89 52 85
dim(spcode_range)
[1] 3 …Run Code Online (Sandbox Code Playgroud) 我有兴趣找到一种有效的方式来获取包含以下内容的组表的摘要:
例如,在生成描述性统计信息的情况下,我使用以下代码:
data("mtcars")
require(dplyr)
mt_sum <- mtcars %>%
group_by(cyl) %>%
summarise_each(funs(min,max), hp, wt, disp)
Run Code Online (Sandbox Code Playgroud)
这会产生所需的输出:
> head(mt_sum)
Source: local data frame [3 x 7]
cyl hp_min wt_min disp_min hp_max wt_max disp_max
(dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
1 4 52 1.513 71.1 113 3.190 146.7
2 6 105 2.620 145.0 175 3.460 258.0
3 8 150 3.170 275.8 335 5.424 472.0
Run Code Online (Sandbox Code Playgroud)
我有兴趣用数字来丰富数据,这个数字可以反映每个组的值计数.关于计数,这可以简单地完成:
mt_sum2 <- mtcars %>%
group_by(cyl) %>%
summarise(countObs = n())
Run Code Online (Sandbox Code Playgroud)
这将生成所需的数据:
> …Run Code Online (Sandbox Code Playgroud) 我有一个pandas排序的数据框(基于时间)是这样的:
from datetime import datetime
df = pd.DataFrame({ 'ActivityDateTime' : [datetime(2016,5,13,6,14),datetime(2016,5,13,6,16),
datetime(2016,5,13,6,20),datetime(2016,5,13,6,27),datetime(2016,5,13,6,31),
datetime(2016,5,13,6,32),
datetime(2016,5,13,17,34),datetime(2016,5,13,17,36),
datetime(2016,5,13,17,38),datetime(2016,5,13,17,45),datetime(2016,5,13,17,47),
datetime(2016,5,16,13,3),datetime(2016,5,16,13,6),
datetime(2016,5,16,13,10),datetime(2016,5,16,13,14),datetime(2016,5,16,13,16)],
'Value1' : [0.0,2.0,3.0,4.0,0.0,0.0,0.0,7.0,8.0,4.0,0.0,0.0,3.0,9.0,1.0,0.0],
'Value2' : [0.0,2.0,3.0,4.0,0.0,0.0,0.0,7.0,8.0,4.0,0.0,0.0,3.0,9.0,1.0,0.0]
})
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
ActivityDateTime Value1 Value2
0 2016-05-13 06:14:00 0.0 0.0
1 2016-05-13 06:16:00 2.0 2.0
2 2016-05-13 06:20:00 3.0 3.0
3 2016-05-13 06:27:00 4.0 4.0
4 2016-05-13 06:31:00 0.0 0.0
5 2016-05-13 06:32:00 0.0 0.0
6 2016-05-13 17:34:00 0.0 0.0
7 2016-05-13 17:36:00 7.0 7.0
8 2016-05-13 17:38:00 8.0 8.0
9 2016-05-13 17:45:00 4.0 4.0 …Run Code Online (Sandbox Code Playgroud) 我已经在网上搜了一个多小时,找不到我需要的东西.
我有两列包含人名; Contact和Created By.两者的格式相同.
基本上我需要计算这两列组合的不同值.例如,名称可以在每列数据中多次,但我只希望名称计数一次.
我尝试使用下面的内容,但它返回的数字高于两列之间的实际不同值.
=Sum(Aggr(Count(Distinct [Created By]),[Contact]))
Run Code Online (Sandbox Code Playgroud)
也尝试了这个和上面返回的相同数字.
=Count(Distinct [Contact] & [Created By])
Run Code Online (Sandbox Code Playgroud)
提前致谢!
aggregate ×10
r ×4
dataframe ×3
group-by ×2
linq ×2
.net ×1
analysis ×1
c# ×1
count ×1
dplyr ×1
duplicates ×1
dynamic-linq ×1
entity ×1
pandas ×1
postgresql ×1
python ×1
qlikview ×1
sql ×1
time-series ×1