我创建了以下类型的数据框
Name Date Value
A 01.01.01 10
B 02.01.01 2
A 04.01.01 4
...
如果日期在一定范围内,我想获得一个列表,该列表按总和对名称列中的元素进行排名。
答案 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