Как создать столбец в фрейме данных, вычисленном из другого фрейма данных в R? - PullRequest
1 голос
/ 28 февраля 2020

У меня есть два следующих фрейма данных:

> df1
  col1
1    A
2    B
3    C

> df2
  col1 col2
1    A    1
2    A    2
3    B    1
4    C    1
4    C    2
4    B    3
4    C    3
4    C    4

Теперь я хочу вставить новый столбец (col_max) в df1 с максимальными значениями df2$col2, агрегированными по df1$col1. Таким образом, требуется вывод:

> df1
  col1 col_max
1    A    2
2    B    3
3    C    4

То, что я пробовал (безуспешно) до сих пор:

df1$col_max <- max(df2[df2$col1 == df1$col1, 2])

и:

get_max <- function(col_value){
    max(df2[df2$col1==col_value, 2])
}

df1$col_max <- get_max(df1$col1)

Любая помощь приветствуется.

1 Ответ

1 голос
/ 28 февраля 2020

Мы можем получить max значение для каждого col1 в df2, а затем merge с df1

merge(df1, aggregate(col2~col1, df2, max), by = 'col1')

#  col1 col2
#1    A    2
#2    B    3
#3    C    4

Используя dplyr, что можно сделать так:

library(dplyr)

df2 %>%  
  group_by(col1) %>% 
  summarise(col2 = max(col2)) %>%  
  right_join(df1, by = 'col1')

Если все значения col1 присутствуют в df2, нет необходимости присоединяться, мы можем просто взять максимальное значение на col1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...