R - 使用min函数聚合变量并查找与min值相关的索引

时间:2018-01-29 16:51:25

标签: r min

我有一个包含3列(ID,位置,值)的数据框。 每个 ID 有几个位置。我想获得每个 ID 的最小,并且在同一聚合中,获取值最小的位置。

例如:

Data <- data.frame(c("A","A","A","B","B"),c(10,2,4,1,6),c(0,5,4,3,1))

colnames(Data) <- c("ID","Position","Value")

# The result would be :
Data_min <- data.frame(c("A","B"),c(10,6),c(0,1)) 

# Aggregate function helps me getting the min value per ID : 
aggregate (Data$Value, list(Data$ID), min)

但我还没有发现如何获得与分钟相关的位置。 我可以使用which函数来查找最小值,但我很确定有一种更聪明的方法可以做到。

3 个答案:

答案 0 :(得分:1)

考虑B2子集数据框并返回相应 Value 匹配的所有行:

k

答案 1 :(得分:0)

这样的东西?

df = Data %>% 
   group_by(ID) %>% 
   summarize(Position=Position[Value==min(Value)],
             Value=min(Value))

答案 2 :(得分:0)

@Antonis summarise答案的另一种方法是将此问题作为过滤过程来处理:

Data <- data.frame(c("A","A","A","B","B"),c(10,2,4,1,6),c(0,5,4,3,1))

colnames(Data) <- c("ID","Position","Value")

library(dplyr)

Data %>%
  group_by(ID) %>%
  filter(Value == min(Value)) %>%
  ungroup()

# # A tibble: 2 x 3
#   ID   Position Value
#   <fct>    <dbl> <dbl>
# 1 A        10.0   0   
# 2 B         6.00  1.00