Как создать последовательность из 2 столбцов одной строки - PullRequest
2 голосов
/ 20 апреля 2020

У меня есть фрейм данных из 2 столбцов и переменное количество строк Пример:

   E    P
1  0.5  1
2  2    2.5
3  3.5  4
.  .    .  
.  .    .
n  En   Pn

Я хочу создать data.frame из последовательности, идущей из первого значения столбца «E» к первому значению столбца «P» на 0,1, и это код, который я сделал:

  rows_covering <<- data.frame(c(c1 = list (seq (E[1],P[1], 0.1)),
                                           c2 = list (seq (E[2],P[2], 0.1)),
                                           c3 = list (seq (E[3],P[3], 0.1))
                                            ))

Однако, так как мое число строк меняется, не очень удобно менять его каждый раз вручную, особенно для большое количество рядов. Можно ли сделать это автоматически?

Ответы [ 4 ]

3 голосов
/ 20 апреля 2020

Вы можете попробовать

lapply(seq_along(E), function(x) list(seq(E[x], P[x], 0.1)))
2 голосов
/ 20 апреля 2020

Базовым вариантом R является использование Map + seq

df <- within(df,rows_covering <- Map(seq,E,P,by = 0.1))

таким, что

> df
    E   P                rows_covering
1 0.5 1.0 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
2 2.0 2.5 2.0, 2.1, 2.2, 2.3, 2.4, 2.5
3 3.5 4.0 3.5, 3.6, 3.7, 3.8, 3.9, 4.0

DATA

df <- structure(list(E = c(0.5, 2, 3.5), P = c(1, 2.5, 4)), class = "data.frame", row.names = c(NA, 
-3L))

> df
    E   P
1 0.5 1.0
2 2.0 2.5
3 3.5 4.0
2 голосов
/ 20 апреля 2020

аккуратный путь ...

df <- tibble(start = c(0.5, 0.2),
             end = c(1, 0.8))

df %>% mutate(seq = map2(start, end, ~seq(.x, .y, by = 0.1)))
1 голос
/ 20 апреля 2020

Я думаю, вы должны использовать seq (E [x], P [x], 0.1)

E <- c(0.5, 2, 3.5)
P <- c(1, 2.5, 4)
my_seq <- lapply(seq_along(E), function (x) (seq(E[x], P[x], 0.1)))

my_seq
...