Добавление последовательности чисел к данным - PullRequest
0 голосов
/ 31 мая 2018

Привет! У меня есть такой фрейм данных

df <-data.frame(x=rep(rep(seq(0,3),each=2),2 ),gr=gl(2,8))

     x gr
1    0  1
2    0  1
3    1  1
4    1  1
5    2  1
6    2  1
7    3  1
8    3  1
9    0  2
10   0  2
11   1  2
12   1  2
13   2  2
14   2  2
15   3  2
16   3  2

Я хочу добавить новый столбец numbering последовательность чисел, когда значение x ==0

Я пытался

library(dplyr)
df%>%
  group_by(gr)%>%
  mutate(numbering=seq(2,8,2))

Error in mutate_impl(.data, dots) : 
  Column `numbering` must be length 8 (the group size) or one, not 4

?

Только для примечания стороны mutate(numbering=rep(seq(2,8,2),each=2)) будет работать для этого минимального примера, но в общем случае лучше смотреть, как значение x изменяется от 0!

ожидаемый результат

     x gr  numbering
1    0  1   2
2    0  1   2
3    1  1   4
4    1  1   4 
5    2  1   6
6    2  1   6
7    3  1   8
8    3  1   8
9    0  2   2
10   0  2   2
11   1  2   4
12   1  2   4
13   2  2   6
14   2  2   6
15   3  2   8
16   3  2   8

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Здесь есть опция, использующая match для получения индекса и передачи значений seq для заполнения

df %>% 
   group_by(gr) %>%
   mutate(numbering = seq(2, length.out = n()/2, by = 2)[match(x, unique(x))])
# A tibble: 16 x 3
# Groups:   gr [2]
#       x gr    numbering
#   <int> <fct>     <dbl>
# 1     0 1             2
# 2     0 1             2
# 3     1 1             4
# 4     1 1             4
# 5     2 1             6
# 6     2 1             6
# 7     3 1             8
# 8     3 1             8
# 9     0 2             2
#10     0 2             2
#11     1 2             4
#12     1 2             4
#13     2 2             6
#14     2 2             6
#15     3 2             8
#16     3 2             8
0 голосов
/ 31 мая 2018

Вы имеете в виду что-то подобное?

library(tidyverse);
df %>%
    group_by(gr) %>%
    mutate(numbering = cumsum(c(1, diff(x) != 0)))
## A tibble: 16 x 3
## Groups:   gr [2]
#       x gr   numbering
#   <int> <fct>    <dbl>
# 1     0 1           1.
# 2     0 1           1.
# 3     1 1           2.
# 4     1 1           2.
# 5     2 1           3.
# 6     2 1           3.
# 7     3 1           4.
# 8     3 1           4.
# 9     0 2           1.
#10     0 2           1.
#11     1 2           2.
#12     1 2           2.
#13     2 2           3.
#14     2 2           3.
#15     3 2           4.
#16     3 2           4.

Или, если у вас должна быть numbering последовательность 2,4,6,... вместо 1,2,3,..., вы можете сделать

df %>%
    group_by(gr) %>%
    mutate(numering = 2 * cumsum(c(1, diff(x) != 0)));
## A tibble: 16 x 3
## Groups:   gr [2]
#       x gr    numering
#   <int> <fct>    <dbl>
# 1     0 1           2.
# 2     0 1           2.
# 3     1 1           4.
# 4     1 1           4.
# 5     2 1           6.
# 6     2 1           6.
# 7     3 1           8.
# 8     3 1           8.
# 9     0 2           2.
#10     0 2           2.
#11     1 2           4.
#12     1 2           4.
#13     2 2           6.
#14     2 2           6.
#15     3 2           8.
#16     3 2           8.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...