[英]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.