Используя dplyr
, вы можете найти Name
с vec
в группе, получить минимум value
и извлечь из него соответствующее Category
.Предполагается, что в каждом Groups
есть хотя бы одно значение vec
.
library(dplyr)
vec <- "A"
df %>%
group_by(Groups) %>%
mutate(consensus_category = Category[value == min(value[Name == vec])])
# Groups Name Category value consensus_category
# <fct> <fct> <fct> <int> <fct>
#1 G1 A cat1 20 cat2
#2 G1 A cat2 1 cat2
#3 G1 B cat3 21 cat2
#4 G1 B cat3 23 cat2
#5 G2 A cat4 32 cat4
#6 G2 C cat2 23 cat4
#7 G2 C cat2 21 cat4
Если в vec
есть несколько значений, вам может потребоваться Name %in% vec
вместо ==
.
data
df <- structure(list(Groups = c("G1", "G1", "G1", "G1", "G2", "G2",
"G2"), Name = c("A", "A", "B", "B", "A", "C", "C"), Category =
c("cat1", "cat2", "cat3", "cat3", "cat4", "cat2", "cat2"), value =
c(20L, 1L, 21L, 23L, 32L, 23L, 21L)), class = "data.frame", row.names =
c(NA, -7L))