按因子级别汇总,将其他变量保留在结果数据框中

Chr*_*ris 16 r

我正在尝试为每个因子级别计算数值列的最小值,同时在结果数据帧中保留另一个因子的值.

# dummy data
dat <- data.frame(
    code = c("HH11", "HH45", "JL03", "JL03", "JL03", "HH11"), 
    index = c("023434", "3377477", "3388595", "3377477", "1177777", "023434"), 
    value = c(24.1, 37.2, 78.9, 45.9, 20.0, 34.6)
    )
Run Code Online (Sandbox Code Playgroud)

我想要的结果是value每个级别的最小值code,保留index在结果数据框中.

# result I want:
#   code value    index
# 1 HH11  24.1   023434
# 2 HH45  37.2  3377477
# 3 JL03  20.0  1177777


# ddply attempt
library(plyr)
ddply(dat, ~ code, summarise, val = min(value))
#   code   val
# 1 HH11  24.1
# 2 HH45  37.2
# 3 JL03  20.0


# base R attempt
aggregate(value ~ code, dat, min)
#   code value
# 1 HH11  24.1
# 2 HH45  37.2
# 3 JL03  20.0
Run Code Online (Sandbox Code Playgroud)

Chi*_*til 16

你需要使用merge结果aggregate和原创data.frame

merge(aggregate(value ~ code, dat, min), dat, by = c("code", "value"))
##   code value   index
## 1 HH11  24.1  023434
## 2 HH45  37.2 3377477
## 3 JL03  20.0 1177777
Run Code Online (Sandbox Code Playgroud)