[英]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 )
)
來自@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
,則應使用“ 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)
為了將來參考,您的問題名字有誤,可能會有更多細節:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.