В R: найдите значения в data.frame, которые ниже определенного порога для каждого фактора

Скажем, у меня есть следующий data.frame:

      df = data.frame(groups =c("A","A","A","B","B","B","C","C","D","D","D","D","D"),
                values =c(1,1,5,3,2,1,7,7,9,8,7,6,5))

и еще один data.frame:

      df_t = data.frame(groups=c("A","B","C","D"),
                  threshold=c(2,5,3,9))

Теперь я хотел бы добавить еще один столбец в dfуказывает, находятся ли значения ниже порога группировки (ИСТИНА) или нет (ЛОЖЬ). В этом случае:

      TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE

Я знаю, что это легко сделать с помощью цикла for. Однако я думаю, что должен быть более элегантный способ добиться этого. Я также предпочел бы базовое решение R над dplyr или data.table.

1 ответ

Решение

Рассмотрите возможность объединения набора данных по «группам» и создания столбца

      library(dplyr)
df %>% 
   left_join(df_t) %>%
    mutate(flag = values < threshold, threshold = NULL)

Или в base R использовать match чтобы получить соответствующий индекс (или merge)

      df$flag <- with(df, values <  df_t$threshold[match(groups, df_t$groups)])
df$flag
#[1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
Другие вопросы по тегам