使用ruby,露营webframework,activerecord-2.1.1,我的db结构是......
create_table :Conf_posts do |t|
%w{title body username posttime hit passwd}.each do |col|
t.column :"#{col}", :string
end
end
Run Code Online (Sandbox Code Playgroud)
我想要每个用户名的总和
我有以下代码.
Post.find :all, :select => "username,sum(hit)", :from => "Conf_posts", :group => "username"
Run Code Online (Sandbox Code Playgroud)
我收到了以下结果.仅返回用户名:
[#<Conf::Models::Post username: "\352\260\225\355\230\201">, #<Conf::Models::Post username: "\353\215\225\352\267\234">, #<Conf::Models::Post username: "\353\225\214\355\230\270">, #<Conf::Models::Post username: "\353\263\264\353\236\214">, #<Conf::Models::Post username: "\354\230\201\352\262\275">, #<Conf::Models::Post username: "\354\232\260\353\236\214">, #<Conf::Models::Post username: "\354\235\270\354\204\235">, #<Conf::Models::Post username: "\354\240\225\355\231\224.">, #<Conf::Models::Post username: "\355\230\201\354\235\264">]
Run Code Online (Sandbox Code Playgroud)
我无法同时收到用户名和用户名的总和
首先看起来容易的东西现在变成了一个脑筋急转弯.
我正在构建您在新闻/博客网站右侧边栏中看到的"评论最多"或"最通过电子邮件"列表中的一个.
该列表必须与最近的日期范围(比如最近7天)相关,因为您希望列表始终保持新鲜并包含较新的内容.否则,收到大量评论的少数文章将始终位于列表顶部.
例如,在我的情况下,该网站有一些文章,每篇文章有几百个评论,但其余的都少于20.所以如果"最多评论"列表被拉出这样:
select
ArticleId,
count(CommentId) as Comments
from
Comment
group by
ArticleId
order by
count(CommentId) desc
limit 10;
Run Code Online (Sandbox Code Playgroud)
然后,几篇有几百条评论的文章总是排在最前面.该列表永远不会改变.
所以我重新编写了select,包括过去7天:
select
ArticleId,
count(CommentId) as Comments
from
Comment
where
Created >= '2011-06-14'
group by
ArticleId
order by
count(CommentId) desc
limit 10;
Run Code Online (Sandbox Code Playgroud)
这看起来更好,但它仍然无法工作,因为它没有考虑过去7天内没有活动的情况.
如果在过去7天内没有发生任何事情(或只发生了一些评论),则该列表应包含此前的活动.底线 - 列表总是需要显示10篇文章.
我总是可以调用多个SQL语句,以7天的增量返回,直到我填写列表,但我不想这样做.我正在缓存进程内存中的结果,但我仍然希望尽可能只进行一次SQL调用.
思考?我觉得这很容易实现,我只是忽略了一个明显的地方.
我有一个数据集X:
customer_id event_type tot_count
931 1 5
231 2 6
231 1 3
333 3 9
444 1 1
931 3 3
333 1 21
444 2 43
Run Code Online (Sandbox Code Playgroud)
我需要一个总和customer_id和event_type水平.这是SQL中的1行代码:
select customer_id, event_type, sum(tot_count) from X group by 1,2
Run Code Online (Sandbox Code Playgroud)
我需要在R中进行相同的操作
R新手在这里,所以请原谅我的无知.我的数据如下:
JOB_ROLE EXP_IT_NETW
1 Software engineering-related (developer, tester, project manager, architecture) 5<10
3 See below None
4 Student <1
5 Software engineering-related (developer, tester, project manager, architecture) 1<5
6 Blogger 10+
Run Code Online (Sandbox Code Playgroud)
我想计算第2列中每个值的实例,并按第1列对计数进行分组,以便结果如下所示:
JOB_ROLE None <1 1<5 5<10 10+
Software engineer 3 5 10 15 3
Student 10 7 5 1 0
...
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点的任何想法?我的输出输出低于.提前致谢!
structure(list(JOB_ROLE = c("Software engineering-related (developer, tester, project manager, architecture)",
"See below", "Student", "Software engineering-related (developer, tester, project manager, architecture)",
"Blogger", "Systems Support", "Student", "IT/Network Administrator",
"Software engineering-related …Run Code Online (Sandbox Code Playgroud) 我有一个与计算"组特征"相关的后续问题,没有ddply和merge
我有一个类似的数据框(如下所示),但试图计算同一类别中其他水果中腐烂水果的百分比.因此,我不应该考虑到有问题的水果本身是否腐烂.每个数据帧有希望澄清这一点,所需的结果列纯粹是为了示例目的而插入的.
理想情况下,我想使用ddply(沿着ddply(df,.(Fruit),mutate,Perc = sum(Rotten)/ length(Rotten))).但是,我找不到一种方法来只考虑同一组中其他行的值.我想我可以使用基于相关行的值的if语句组合,但我想知道是否有更优雅的方法来实现这一点?非常感谢,W
Fruit Rotten Desired_Outcome
1 Apple 1 0.33
2 Apple 1 0.33
3 Apple 0 0.66
4 Apple 0 0.66
5 Pear 1 0.66
6 Pear 1 0.66
7 Pear 1 0.66
8 Pear 0 1.00
9 Cherry 0 0.00
10 Cherry 0 0.00
11 Cherry 0 0.00
12 Banana 1 NA
Fruit=c(rep("Apple",4),rep("Pear",4),rep("Cherry",3),"Banana")
Gender=c(rep("Male",3),rep("Female",3))
Rotten=c(1,1,0,0,1,1,1,0,0,0,0,1)
Desired_Outcome=c(0.33,0.33,0.66,0.66,0.66,0.66,0.66,1,0,0,0,NA)
df=data.frame(Fruit,Rotten,Desired_Outcome)
df
Run Code Online (Sandbox Code Playgroud) 在F#中,我有很多列表(它们的实际数量因输入数据而不同),我想对所有这些列表进行聚合(假设为了简化而添加).所以我想要实现的是List.map2或List.map3所做的事情,但是对于更多的列表.
我怎么处理它?我想知道这是否可以与List.scan一起使用?
我有以下数据:
x1 x2 x3 x4
34 14 45 53
2 8 18 17
34 14 45 20
19 78 21 48
2 8 18 5
Run Code Online (Sandbox Code Playgroud)
在第1行和第3行; 第2列和第5列的列X1; X2,X3的值相等.如何仅输出4行,数字相同?输出应采用以下格式:
x1 x2 x3 x4
34 14 45 53
34 14 45 20
2 8 18 17
2 8 18 5
Run Code Online (Sandbox Code Playgroud)
如果不清楚,请问我问题.
附加问题:在输出中
x1 x2 x3 x4
34 14 45 53
34 14 45 20
2 8 18 17
2 8 18 5
Run Code Online (Sandbox Code Playgroud)
在最后一列中找到值的总和:
x1 x2 x3 x4
34 14 45 73
2 …Run Code Online (Sandbox Code Playgroud) 我的数据表格式如下:
id source
1 A
1 B
2 A
3 B
4 A
4 B
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的列,该列按分组id并具有反映相应source值的值(即.A, B, or Both)both如果id对应于A和,将使用的位置B.
我希望输出如下:
id source source_group
1 A both
1 B both
2 A A
3 B B
4 A both
4 B both
Run Code Online (Sandbox Code Playgroud)
如果您可以将其作为通用目的来处理其他值source,例如A, B, C, D, ... etc.
假设我们有这样一个数组:
var arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)
我想执行聚合:
var sum = arr.Aggregate((a, b) => a + b);
Run Code Online (Sandbox Code Playgroud)
当然,这只是简化它的一个例子.我没有处理int,但需要合并的更复杂的对象(它们是树).但是,这种聚合效果非常糟糕,因为它从左向右迭代,添加了两个相互对立的元素.在int的情况下,这没有任何区别,但是在复杂对象的情况下,更好的解决方案是以树的方式执行聚合.这是什么意思?
55
36 19
10 26 19
3 7 11 15 19
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
我希望这个架构能够说清楚.
如何在C#的LINQ中实现这一目标?
我有一个大data.frame的character列和几个包含NA's的数字列.
以下是一些示例行:
df <- data.frame(id=rep("A",3),v1=c(NA,1,NA),v2=c(2,5,2),v3=c(NA,NA,NA),V4=c(0,0,0),stringsAsFactors=F)
Run Code Online (Sandbox Code Playgroud)
由于df$id重复我想aggregate df通过df$id,并适用sum于所有其它列.
我这样做了:
require(data.table)
setDT(df)[,lapply(.SD, function(x) sum(x,na.rm=T)),by=.(id)]
Run Code Online (Sandbox Code Playgroud)
我得到这个:
id v1 v2 v3 V4
1: A 1 9 0 0
Run Code Online (Sandbox Code Playgroud)
所以列v3是所有NA's中df,并因此获得的价值0,这对我的问题,因为在这种情况下,我想保留NA的价值,但在所有其他情况下(其中聚集了数字和的混合NA的,显然我想删除NA'否则总和将是NA).如示例所示(df$v4)我有所有列0,因此我不能简单地用聚合替换所有的0's .NAdata.frame
换句话说,这是我期望的结果:
id v1 v2 v3 V4
1: A 1 9 NA 0
Run Code Online (Sandbox Code Playgroud)
知道如何实现这一目标data.table的.SD …