我试图在值返回到零之前找到列中的最后一个值。我有一个列测量了事件发生的间隔,我希望在零之前对最后一个值进行子集化。这是代码的片段。 (这是一个数据框)
Phase Duration
1 0
1 1.37
1 2.9
1 3.5
2 0
2 1.09
2 3.92
3 0
3 0.23
4 0
4 0.59
4 0.93
所以我想要的输出是
Phase TotalDuration
1 3.5
2 3.92
3 0.23
4 0.93
我天真地认为对这些值求和会有效但是0.93 + 0.59显然大于0.93
答案 0 :(得分:1)
如果我理解正确,那就是你的目标
dat <- data.frame(Phase=c(1,1,1,1,2,2,2,3,3,4,4,4),
Duration=c(0,1.37,2.9,3.5,0,1.09,3.92,0,0.23,0,0.59,0.93))
library(dplyr)
dat %>%
group_by(Phase) %>%
summarise(TotalDuration=max(Duration))
输出:
Source: local data frame [4 x 2]
Phase TotalDuration
<dbl> <dbl>
1 1 3.50
2 2 3.92
3 3 0.23
4 4 0.93
答案 1 :(得分:0)
有几种选择。
dat <- data.frame(
Phase=c( 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4 ),
Duration=c( 0, 1.37, 2.9, 3.5, 0, 1.09, 3.92, 0, 0.23, 0, 0.59, 0.93 )
)
来自@ akrun的评论:
library(dplyr)
dat %>%
group_by(Phase) %>%
slice(n())
# Source: local data frame [4 x 2]
# Groups: Phase [4]
# Phase Duration
# <int> <dbl>
# 1 1 3.50
# 2 2 3.92
# 3 3 0.23
# 4 4 0.93
基础R,如果您始终可以认为max
有效:
aggregate(Duration ~ Phase, data = dat, FUN = max)
基础R,如果你不能假设max
并且应该使用&#34; last&#34;代替:
# optional use of a helper-function ... dplyr::last works too
last1 <- function(x) tail(x, n = 1)
aggregate(Duration ~ Phase, data = dat, FUN = last1)
为了将来参考,您的问题会被错误地命名,并且可能会有更多详细信息: