我有一个包含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
函数来查找最小值,但我很确定有一种更聪明的方法可以做到。
答案 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