非均匀子集的总和

时间:2017-08-18 13:42:26

标签: r function subset subset-sum

在我的项目中,我有大量关于巴士公司的信息。我按日期分隔了一个子集,因此我可以从条形图中看到最需要的总线(在“Linha”列中)。

- > E.g。子集:

  

data.date [[1]]相当于日期为“2013-03-10”的行子集。

为了实现这一目标,我尝试将所有不同的“Linhas”(公交线路)中的所有值在“Catraca”(检票口)中的所有值加起来。而且,我正在努力奋斗。

这是我使用的逻辑

public class Job {
    public User appliedUsers;
    private String title;
    private String salary;
    ...

输出是一些逻辑向量。不是理想的。

这些图片可能有助于您了解情况

linha.sum <- with(data.date[[1]], data.date[[1]] == linha.unique, sum(data.date[[1]]$Catraca))

Picture of the sample

我想要求和的值是不同“Linha”的“Catraca”

数据样本:

 View(data.date[[1]])

2 个答案:

答案 0 :(得分:2)

由于data.dates似乎是data.frames列表(可能由split()创建),因此可以使用lapply获取每个数据集中的列的总和。< / p>

以下是一些可重现的数据:

data.dates <- list(data.frame(
  Linha = c(3,3,1201,1201), 
  Catraca = c(0,37,2,22)
))

使用dplyr

library(dplyr)
lapply(data.dates, function(x) {
         x %>% group_by(Linha) %>% summarize(catSum = sum(Catraca))
})
# [[1]]
# # A tibble: 2 x 2
#    Linha         catSum
#    <dbl>          <dbl>
# 1     3             37
# 2  1201             24

然后,这将为列表中的每个data.frame添加一列,其中包含每个组的总和(按日期和linha)

,基数为R

从@Sagars评论中,您还可以使用aggregate中的lapply

lapply(data.dates, function(x) {
  aggregate(x$Catraca, by = list(Linha = x$Linha), FUN = sum)
})
# [[1]]
#   Linha  x
# 1     3 37
# 2  1201 24

基准

事实上,microbenchmark()显示,在这种情况下,基本解决方案(通常)更快。但是,这仅使用OP中给出的小子集进行测试。

# Unit: microseconds
#   expr      min       lq      mean    median        uq      max neval cld
#  dplyr 1803.553 1878.499 1994.4945 1918.8880 2016.8730 6495.747   100   b
#   base  481.535  513.818  543.4041  538.1365  560.4635  803.222   100  a 

答案 1 :(得分:2)

您的查询根据不同的“Linha”要求“Catraca”的总和。

onReceive

将提供。