- 已编辑
来一个data.table
的写法
library(data.table)
c1 <- c('a', 2015, 300)
c2 <- c('a', 2016, 400)
c3 <- c('b', 2015, 700)
c4 <- c('b', 2016, 600)
dt <- data.frame(rbind(c1, c2, c3, c4), stringsAsFactors = FALSE)
names(dt) <- c('name', 'date', 'amount')
setDT(dt)
dt
#> name date amount
#> 1: a 2015 300
#> 2: a 2016 400
#> 3: b 2015 700
#> 4: b 2016 600
# 一步到位
dt2 <- dt[,.SD[amount==max(amount),.(merged=paste0(date,"-",amount))],by=.(name)]
dt2
#> name merged
#> 1: a 2016-400
#> 2: b 2015-700
Created on 2020-01-02 by the reprex package (v0.3.0)