У меня есть data.frame, dat, который выглядит следующим образом
dat = data.frame(x = c(1, 1.1, 1.2, 1.3), y = c(2, 2.1, 2.2, 2.3), output = c(2, 10, 101, 100))
x y output
1 1.0 2.0 2
2 1.1 2.1 10
3 1.2 2.2 101
4 1.3 2.3 100
Я хочу, чтобы каждая пара элементов столбцов "x" и "output" повторялась над столбцом "y".".
Я пытался использовать tidyr::spread
, tidyr::gather
и reshape2::melt
безрезультатно.Это потому, что я новичок в использовании tidyr
и reshape2
и других пакетов, изменяющих форму.
В настоящее время я прибег к использованию цикла для извлечения каждой пары элементов из столбцов "x" и "output" и создания нового data.frame, final_df
, который объединяет результирующие data.frames.Я считаю, что это определенно не самый эффективный способ сделать это, и я уверен, что где-то есть функция с одной линией, которая может сделать эту магию для меня.
В результирующем data.frame, если я подставлюИспользование data.frame, скажем,
dplyr::filter(final_df, x == 1, output == 2)
должно выглядеть так:
data.frame(x = rep(1, dat$x[1], nrow(dat)), y = dat$y, output = rep(dat$output[1], nrow(dat)))
x y output
1 1 2.0 2
2 1 2.1 2
3 1 2.2 2
4 1 2.3 2
Я буду рад ответу с использованием tidyverse.Спасибо.