У меня есть фрейм данных с большим количеством категорий.Для категории я вычисляю значение сдвига.С этим значением я хочу сместить каждый столбец этой части фрейма данных вниз на это значение.Для этого я подумал, что было бы полезно использовать «вложенный тибл», а затем использовать map
функцию purrr
для выполнения смещения.
Чтобы искусственно воспроизвести проблему, я бы создал такойфрейм данных с набором данных радужной оболочки:
df <- iris %>% group_by(Species) %>%
nest() %>% mutate(shift = as.integer(c(1, 2, 3)))
df
# A tibble: 3 x 3
Species data shift
<fct> <list> <int>
1 setosa <tibble [50 x 4]> 1
2 versicolor <tibble [50 x 4]> 2
3 virginica <tibble [50 x 4]> 3
Мое намерение состояло в том, чтобы использовать функцию карты, которая берет каждый столбец столбцов в «данных» и сдвигает их на значения сдвига.В коде (он не запущен, просто для пояснения:
df %>% mutate(data.shift = map(data, lag(.x, n = shift)))
Я хотел бы получить такой вывод:
# A tibble: 3 x 4
Species data shift data.shift
<fct> <list> <int> <list>
1 setosa <tibble [50 x 4]> 1 <tibble[50 x 4]>
2 versicolor <tibble [50 x 4]> 2 <tibble[50 x 4]>
3 virginica <tibble [50 x 4]> 3 <tibble[50 x 4]>
, где каждый столбец «data.shift» имеетзапаздывание сдвига значений. Например, для первой строки необъявленный тиббл будет выглядеть так:
# A tibble: 50 x 4
Sepal.Length Sepal.Width Petal.Length Petal.Width
<dbl> <dbl> <dbl> <dbl>
1 NA NA NA NA
2 5.10 3.50 1.40 0.200
3 4.90 3.00 1.40 0.200
4 4.70 3.20 1.30 0.200
5 4.60 3.10 1.50 0.200
6 5.00 3.60 1.40 0.200
7 5.40 3.90 1.70 0.400
8 4.60 3.40 1.40 0.300
9 5.00 3.40 1.50 0.200
10 4.40 2.90 1.40 0.200
# ... with 40 more rows
Есть ли способ сделать это, используя функцию purrr::map
?