根据另一列总结

时间:2016-12-19 03:05:55

标签: r list

我试图在值返回到零之前找到列中的最后一个值。我有一个列测量了事件发生的间隔,我希望在零之前对最后一个值进行子集化。这是代码的片段。 (这是一个数据框)

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

2 个答案:

答案 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 )
)
  1. 来自@ 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
    
  2. 基础R,如果您始终可以认为max有效:

    aggregate(Duration ~ Phase, data = dat, FUN = max)
    
  3. 基础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)
    
  4. 为了将来参考,您的问题会被错误地命名,并且可能会有更多详细信息:

    • 你在什么时候总结&#34;什么?
    • 请包含您尝试过的任何代码
    • 如果你在StackOverflow中搜索R中包含&#34; variable by group&#34;的任何内容,那么前几篇文章可能会有用。