Как создать отсчет данных фрейма - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать фрейм данных в r, который выглядит так 3. Затем x увеличивается на 1, и процесс начинается снова

Ответы [ 5 ]

5 голосов
/ 13 февраля 2020

Вы можете использовать expand.grid + rev

rev(expand.grid(z = 1:3, y = 1:2, x = 3:4))
   x y z
1  3 1 1
2  3 1 2
3  3 1 3
4  3 2 1
5  3 2 2
6  3 2 3
7  4 1 1
8  4 1 2
9  4 1 3
10 4 2 1
11 4 2 2
12 4 2 3
1 голос
/ 13 февраля 2020

Можно использовать tidyr::crossing().

В вашем случае:

crossing(X = 3:4,
         Y = 1:2,
         Z = 1:3)
0 голосов
/ 13 февраля 2020

A data.table решение для полноты:

data.table::CJ(x = 3:4, y = 1:2, z = 1:3)

    x y z
 1: 3 1 1
 2: 3 1 2
 3: 3 1 3
 4: 3 2 1
 5: 3 2 2
 6: 3 2 3
 7: 4 1 1
 8: 4 1 2
 9: 4 1 3
10: 4 2 1
11: 4 2 2
12: 4 2 3
0 голосов
/ 13 февраля 2020

Вот еще одно базовое решение R в дополнение к expand.grid подходу @Onyambu.

Особенность этого кода ниже в том, что вам нужно всего лишь поместить все в перечислите lst и передайте его функции f:

f <- function(lst) data.frame(mapply(function(p,n) rep(p,each=n),lst, prod(lengths(lst))/cumprod(lengths(lst))))

lst<- list(x = 3:4,y = 1:2,z = 1:3)
res <- f(lst)

так, чтобы

> res
   x y z
1  3 1 1
2  3 1 2
3  3 1 3
4  3 2 1
5  3 2 2
6  3 2 3
7  4 1 1
8  4 1 2
9  4 1 3
10 4 2 1
11 4 2 2
12 4 2 3
0 голосов
/ 13 февраля 2020
data.frame(X=rep(3:4,each=6,1),
           Y=rep(1:2,each=3,2),
           Z=rep(1:3,each=1,4))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...