Добавить новый вектор во вложенный список - PullRequest
0 голосов
/ 10 марта 2019

Я только учусь работать со списками в R, и я довольно близко подошел к тому, что я хочу сделать. Я поднимаю руку для небольшого толчка в правильном направлении:

my_data <- 
  data.frame(group = c(sample(c('A', 'B', 'C'), 20, replace = TRUE)), 
                      x = runif(100, 0, 10)) %>% 
  group_by(group) %>% 
  nest() %>% 
  mutate(number = sample(3:7, 3))

Что я хотел бы сделать:

Просто, правда. Я хочу добавить новый вектор во вложенный список («данные»), содержащий соответствующее значение из вектора «число». Так, например, первые 5 строк первого элемента в списке будут выглядеть примерно так:

head(my_data$data[[1]],5) %>% mutate(y=4)

Но я не знаю, как это сделать! (Очевидно, я жестко запрограммировал приведенный выше пример.)

Я пробовал:

Много перестановок unlist, unnest, map, pluck. Я не записал все, что попробовал.

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Если я вас правильно понял, вы пытаетесь создать функцию, которая добавляет новый столбец:

require(tidyverse)

my_data <- my_data %>% 
  mutate(data = map(data, function(x) { 
    x %>% 
      mutate(y = 4)
    }))

Результат:

my_data$data[1]
[[1]]
# A tibble: 30 x 2
        x     y
    <dbl> <dbl>
 1 5.97       4
 2 7.44       4
 3 9.96       4
 4 9.98       4
 5 0.0933     4
 6 1.45       4
 7 9.78       4
 8 6.88       4
 9 5.10       4
10 6.68       4
1 голос
/ 10 марта 2019

Используйте purrr::map2, если у вас есть два вектора для итерации по

library(tidyverse)
my_data <- my_data %>% mutate(data_mod=map2(data,number,cbind))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...