У меня есть 4 вектора (d1, d2, d3, d4) разной длины, из которых я создаю такой фрейм данных
df <- data.frame(
x = c(
seq_along(d1),
seq_along(d2),
seq_along(d3),
seq_along(d4)
),
y = c(
d1,
d2,
d3,
d4
),
id = c(
rep("d1", times = length(d1)),
rep("d2", times = length(d2)),
rep("d3", times = length(d3)),
rep("d4", times = length(d4))
))
Добавление нового вектора означает добавление его в 3 разных местах, это вот чего я бы хотел избежать. В идеале я хотел бы передать d1,d2,d3,d4
в функцию, которая затем возвращает фрейм данных.
Первые шаги, кажется, заключаются в том, чтобы обернуть векторы в список и назвать их.
l <- list(d1,d2,d3,d4)
names(l) <- c("d1","d2","d3","d4")
Но я борюсь со второй частью, которая, вероятно, должна быть чем-то вроде этого (псевдокод)
df <- data.frame(
x = flatten(map(l, function(a) seq_along(a))),
y = flatten(l),
id = flatten(map(l, function(a) rep(a.name,times=length(a))))
)
Как правильно построить фрейм данных из списка? Или есть лучший способ сделать это?
ОБНОВЛЕНИЕ: для демонстрационных целей можно представить d1..d4 как
d1 <- pnorm(seq(-2, 2, 0.05))-3
d2 <- pnorm(seq(-3, 3, 0.10))
d3 <- pnorm(seq(-1, 2, 0.05))-4
d4 <- pnorm(seq(-4, 3, 0.15))