Как я могу создать новую переменную, сравнивая различные строки, которые имеют общие значения переменных? - PullRequest
0 голосов
/ 13 марта 2020

При работе с набором данных, подобным следующему:

program <- c("Miami", "Miami", "Miami", "Orlando", "Orlando", "Tampa")
student <- c("Mark", "Mark", "Mark", "Brandon", "Brandon", "Michael")
assessment_date <- c("2019-07-01", "2019-07-27", "2019-08-02", "2019-07-25", "2019-08-05", "2019-07-25")
score <- c(2.3, 3.5, 2.8, 5.6, 5, 5.5)

Из этого набора данных я хочу сгруппировать строки по программе и студенту, чтобы затем извлечь минимальную дату из этого group_by и установить sh вызов нового столбца Pre_Score.

Пример вывода. Надеюсь, это выглядит так:

names(df) <- c("Program", "Student", "Pre Score")
df[1, ] <- c("Miami", "Mark", 2.3)

Надеюсь, это имеет смысл. Любая помощь будет очень признателен.

1 Ответ

0 голосов
/ 13 марта 2020

Функция group_by из dplyr идеально подходит для этого.

program <- c("Miami", "Miami", "Miami", "Orlando", "Orlando", "Tampa")
student <- c("Mark", "Mark", "Mark", "Brandon", "Brandon", "Michael")
assessment_date <- c("2019-07-01", "2019-07-27", "2019-08-02", "2019-07-25", "2019-08-05", "2019-07-25")
score <- c(2.3, 3.5, 2.8, 5.6, 5, 5.5)

df <- data.frame(program,student, assessment_date = as.Date(assessment_date), score)

Убедитесь, что assessment_date в формате Date с использованием as.Date. Использование filter в group_by гарантирует, что мы получим только первую дату для каждой комбинации программы x для студента.

library(dplyr)

df %>%
  group_by(program, student) %>%
  filter(assessment_date == min(assessment_date)) %>%
  select(program,student, pre_score = score)

Результаты

# A tibble: 3 x 3
# Groups:   program, student [3]
  program student pre_score
  <fct>   <fct>       <dbl>
1 Miami   Mark          2.3
2 Orlando Brandon       5.6
3 Tampa   Michael       5.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...