R中的条件总和

时间:2014-11-06 00:12:50

标签: r conditional

我创建了以下类型的数据框

Name Date      Value
A    01.01.01  10  
B    02.01.01  2  
A    04.01.01  4  
...

如果日期在一定范围内,我想获得一个列表,该列表按总和对名称列中的元素进行排名。

1 个答案:

答案 0 :(得分:1)

欢迎使用Stack Overflow(SO)。对于任何提出问题的人来说,提供可以使用dput()获得的可重现数据非常重要。请阅读this link。如果您尝试过某些内容,则需要保留代码并描述您的挑战。通过这种方式,您可以帮助SO用户节省更多时间,并且您可能会获得更多支持。在这里,我尽力阅读您的问题,创建了一个示例数据,并使用dplyr包执行了以下操作。

# Sample data 
foo <- data.frame(id = c("A", "B", "A", "C", "D", "B", "D", "E", "A", "S", "B"),
                  date = c("01.01.01", "02.01.01", "04.01.01", "05.01.01",
                           "11.01.01", "09.03.01", "12.15.01", "08.08.01",
                           "03.27.01", "11.16.01", "04.07.01"),
                  value = c(-10, -2, -4, 8, 5, 2, 10, 5, 11, 7, 8),
                  stringsAsFactors = FALSE)

#   id     date value
#1   A 01.01.01   -10
#2   B 02.01.01    -2
#3   A 04.01.01    -4
#4   C 05.01.01     8
#5   D 11.01.01     5
#6   B 09.03.01     2
#7   D 12.15.01    10
#8   E 08.08.01     5
#9   A 03.27.01    11
#10  S 11.16.01     7
#11  B 04.07.01     8

library(dplyr)

foo %>%
    # Create date objects
    mutate(date = as.Date(date, format = "%m.%d.%y")) %>%
    # Select data points which stay between 2001-01-01 and 2001-08-31
    filter(between(date, as.Date("2001-01-01"), as.Date("2001-08-31"))) %>%
    # For each id group
    group_by(id) %>%
    # Get sum of value
    summarise(Total = sum(value)) %>%
    # Arrange row order by descending order with Total
    arrange(desc(Total))

#  id Total
#1  C     8
#2  B     6
#3  E     5
#4  A    -3