Создание новых переменных для каждой группы наблюдений в R - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть 11 переменных в моем фрейме данных.Первый - это уникальный идентификатор наблюдения (плоскости).Второе - число от 1 до 21, представляющее полет данного самолета.Остальные переменные - это время, скорость, расстояние и т. Д.

Я хочу создать новые переменные для каждой группы (числа) полета, например, time_1, time_2, ...,velocity_1, velocity_2 и т. Д., И, следовательно, сократить количество наблюдений (повторяющихся).

Я действительно не знаю, с чего начать.Я думал о функции мутации, такой как:

mutate(df, time_1 = ifelse(n_flight == 1, time, NA))

Но это будет много печатать, и, возможно, возникнет новая проблема.

1 Ответ

0 голосов
/ 02 апреля 2019

По сути, вы хотите преобразовать длинные в широкие данные для каждой переменной.В этом случае вы можете lapply преодолеть их с помощью tidyr::spread.Предположим, что данные выглядят следующим образом:

library(dplyr)
library(tidyr)
df <- data.frame(
  ID = c(rep("A", 3), rep("B", 3)), 
  n_flight = rep(seq(3), 2),
  time = seq(19, 24), 
  velocity = rev(seq(65, 60))
)

Тогда следующие данные будут генерировать интересующие вас результаты, если вы избавитесь от дополнительных переменных ID.

lapply(
  setdiff(names(df), c("ID", "n_flight")), function(x) {
    df %>% 
      select(ID, n_flight, !!x) %>%
      tidyr::spread(., key = "n_flight", value = x) %>%
      setNames(paste(x, names(.), sep = "_"))
  }
) %>%
  bind_cols()

Позвольте мнезнаю, что это не то, что ты собирался.

...