簡體   English   中英

基於另一列的求和

[英]Summing based on another column

我正在嘗試在值返回零之前在列中找到最后一個值。 我有一欄測量了事件發生的間隔,我想將零之前的最后一個值作為子集。 這是代碼片段。 (這是一個數據幀)

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

如果我理解正確,這就是您所追求的

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

幾種選擇。

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 ,則應使用“ last”:

     # optional use of a helper-function ... dplyr::last works too last1 <- function(x) tail(x, n = 1) aggregate(Duration ~ Phase, data = dat, FUN = last1) 

為了將來參考,您的問題名字有誤,可能會有更多細節:

  • 您在什么時候“求和”什么?
  • 請輸入您嘗試過的任何代碼
  • 如果您在StackOverflow中搜索R中的任何內容,包括“ group by variable ”,那么最上面的幾篇文章可能很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM