【发布时间】:2016-01-06 21:50:01
【问题描述】:
我有一个如下所示的数据框:
States <- data.frame(State = c('a','a','b','c','c','a','b'),Duration = c(2,3,5,4,7,2,1))
我想找出这个系统每次访问一个州所花费的持续时间。也就是说,我想要
State Duration
a 5
b 5
c 11
a 2
b 1
快速回答使用group_by,但是错了;
States %>% group_by(State) %>% summarise(Total = sum(Duration))
给予
State Total
(fctr) (dbl)
1 a 7
2 b 6
3 c 11
你会怎么做?
谢谢,
比尔
这是一个更简单的版本,可能更接近我的问题的本质。
States <- data.frame(State = c('a','a','a','b','c','c','b','a','b','d'),Duration = c(0,2,2,3,0,5,4,7,2,1))
States
State Duration
1 a 0
2 a 2
3 a 2
4 b 3
5 c 0
6 c 5
7 b 4
8 a 7
9 b 2
10 d 1
我确实想总结一下连续访问各州所花费的时间。对于这种情况,那就是
a 2
b 3
c 5
b 4
a 7
b 2
d 1
换句话说,您为每次国事访问取最后一个持续时间,如果该访问有多个条目,则第一个持续时间为 0(我没有设计数据;我只是在处理它) .
如果我像上面那样使用 group_by,dplyr 会按状态处理数据框,这给了我错误的答案:每个状态一个条目,而不是每次访问一个条目。
这有帮助吗?我认为它们都是相关的:有没有一种方法可以聚合行而不重新排列它们?
【问题讨论】:
-
@DatamineR 啊 - 我读到第二个代码块是想要的结果,第三个代码块是他尝试过的,第四个代码块是他错误尝试的输出。
-
为了澄清,第一个代码块创建输入数据。第二个显示我想要什么。第三个显示使用 group_by 的错误代码,第四个显示错误代码的结果。我正在寻找产生第二个代码块的代码。 @tospig,你是对的。