簡體   English   中英

在R中按組和時間計算最大值

[英]Compute the maximum value by group and by time in R

對於以下面板數據(在“時間”上跟蹤單位“ID”的值:

ID=c(1,1,1,1,2,2,2,2)
Time=c(1,2,3,4,1,2,3,4)
Value=c(1,5,4,8,2,5,9,7)

我想創建一個向量,它是每個“ID”和“時間”的最大值

輸出向量“Max_Value”如下:

Max_Value=c(1,5,5,8,2,5,9,9)

為了澄清,這里是如何為 ID“1”計算 Max_Value。

對於ID“1”,“Time=1”的最大值為1,最大值為{1}。

同樣,對於ID“1”,“Time=2”的最大值為5,最大值為{1,5}。

同樣,對於 ID“1”,“Time=3”的最大值為 5,最大值為 {1,5,4}。

由於我無法自己添加評論,我建議使用 @markus 輸入:

library(dplyr)

ID=c(1,1,1,1,2,2,2,2)
Time=c(1,2,3,4,1,2,3,4)
Value=c(1,5,4,8,2,5,9,7)


tbl <- tibble(ID = ID, Time = Time, Value = Value)
tbl %>% group_by(Time, ID) %>% mutate(result = max(Value))  ## shouldnt work

tbl %>% group_by(ID) %>% mutate(Max_Value = cummax(Value)) ## should work

這是一個data.table選項:

library(data.table)
dt <- data.table(ID=c(1,1,1,1,2,2,2,2),
                 Time=c(1,2,3,4,1,2,3,4),
                 Value=c(1,5,4,8,2,5,9,7))

max_v <- function(x) max(dt[ID==x$ID & Time <= x$Time, Value])

sapply(split(dt,1:nrow(dt)),max_v)

你也可以試試:

library(data.table)

dt <- data.table(ID=c(1,1,1,1,2,2,2,2),
                 Time=c(1,2,3,4,1,2,3,4),
                 Value=c(1,5,4,8,2,5,9,7))

dt <- dt[order(Time)]

dt[,Max_Value := cummax(Value), by=ID]

dt[order(ID)]
#    ID Time Value Max_Value
# 1:  1    1     1         1
# 2:  1    2     5         5
# 3:  1    3     4         5
# 4:  1    4     8         8
# 5:  2    1     2         2
# 6:  2    2     5         5
# 7:  2    3     9         9
# 8:  2    4     7         9

暫無
暫無

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

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