簡體   English   中英

R中重復行中的最大值

[英]Max among duplicated rows in R

我有一個包含幾個變量的數據集,例如ID,Time,Age,v1,v 2,v3。 我需要替換重復的行(ID和時間的條件); 對於具有相同ID和時間的行,獲取每個變量的最大值,並將其替換為數據集(我需要保留所有重復的行)。 任何意見,將不勝感激。

使用dplyr

library(dplyr)
your_data %>%
  group_by(ID, time) %>%
  mutate_each(funs = funs(max)))

如果您有NA值,請嘗試

your_data %>%
  group_by(ID, time) %>%
  mutate_each(funs = funs(max(., na.rm = T)))

很高興對提供的任何數據進行測試/演示。

我的示例只有v1和v2,但您知道了...

> head(d)
  ID Time Age v1 v2
1  a    1  11 12 13
2  a    1  21 12 53
3  a    1  11 42 43
4  b    1   4  6  7
5  b    2   1  2  3

在這里我們合計以獲得最大

> agg = aggregate(
          list(Age=d$Age,v1=d$v1,v2=d$v2),
          by=list(ID=d$ID,Time=d$Time),
          FUN=max
        )

> head(agg)
  ID Time Age v1 v2
1  a    1  21 42 53
2  b    1   4  6  7
3  b    2   1  2  3

現在,我們將其與原始數據的前兩列合並

> merge(d[,c(1,2)],agg,by=c("ID","Time"))
  ID Time Age v1 v2
1  a    1  21 42 53
2  a    1  21 42 53
3  a    1  21 42 53
4  b    1   4  6  7
5  b    2   1  2  3

另一種使用ave替代方法,應用於@Larsenal的示例數據:

idvars <- c("ID","Time")
numvars <- setdiff(names(dat), idvars)
dat[numvars] <- lapply(dat[numvars], function(x) ave(x, dat[idvars], FUN=max))

#  ID Time Age v1 v2
#1  a    1  21 42 53
#2  a    1  21 42 53
#3  a    1  21 42 53
#4  b    1   4  6  7
#5  b    2   1  2  3

暫無
暫無

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

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