Использование `map()` во вложенном фрейме данных

У меня возникли проблемы с использованием функции map() вместе с функцией nest().

У меня есть некоторые данные, например:

counter

    counter           date_time total
1  06032013 2013-06-03 16:00:00   476
2  06032013 2013-06-03 17:00:00   578
3  06032013 2013-06-03 18:00:00   406
4  06032013 2013-06-03 19:00:00   272
5  06032013 2013-06-03 20:00:00   240
6  06032013 2013-06-03 21:00:00    96
7  06032013 2013-06-03 22:00:00    67
8  06032013 2013-06-03 23:00:00    37
9  06032013 2013-06-04 00:00:00    10
10 06032013 2013-06-04 01:00:00    11
11 06032013 2013-06-04 02:00:00     8
12 06032013 2013-06-04 03:00:00     9
13 06032013 2013-06-04 04:00:00    23
14 06032013 2013-06-04 05:00:00    83
15 06032013 2013-06-04 06:00:00   291
16 06032013 2013-06-04 07:00:00   532
17 06032013 2013-06-04 08:00:00   434
18 06032013 2013-06-04 09:00:00   326
19 06032013 2013-06-04 10:00:00   310
20 06032013 2013-06-04 11:00:00   292

Затем я вложил эти данные на основе поля counter. Такие как:

y <- counters %>% nest(-counter)

y 

# A tibble: 140 × 2
    counter               data
      <chr>             <list>
1  06032013  <tibble [91 × 2]>
2  62295051 <tibble [310 × 2]>
3  81295014 <tibble [301 × 2]>
4  81295015 <tibble [294 × 2]>
5  81295091 <tibble [303 × 2]>
6  81295092 <tibble [306 × 2]>
7  81313062 <tibble [142 × 2]>
8  81313063 <tibble [142 × 2]>
9  82295046 <tibble [139 × 2]>
10 82295050 <tibble [141 × 2]>

Что я хочу сделать, так это сопоставить каждый вложенный фрейм данных и построить матрицу xts в моем вложенном фрейме данных. Я пробовал много вариантов следующего кода:

y %>% mutate(stuff = map(xts(data$total, order.by = data$date_time)))

Меня приветствует Error in data$date_time : object of type 'closure' is not subsettable.

Любые мысли были бы замечательными!


person thus__    schedule 20.12.2016    source источник
comment
Неправильный синтаксис. Попробуйте это: y %>% mutate(stuff = map(data, ~ xts(.x$total, order.by = .x$date_time)))   -  person Michael Griffiths    schedule 20.12.2016
comment
Если вы находите запись формулы мурлыканья запутанной, сравните ее со стандартной записью анонимных функций: y %>% mutate(stuff = map(data, function(x){xts(x$total, order.by = x$date_time)})). Убедитесь, что вы передаете data, имя столбца списка, по которому вы хотите выполнить итерацию, а затем ссылаетесь на данные в каждом элементе data через переменную, которую вы передаете функции (.x по умолчанию в мурлыке).   -  person alistaire    schedule 20.12.2016
comment
@MichaelGriffiths Написать ответ?   -  person alistaire    schedule 20.12.2016


Ответы (1)


@ Майкл-Гриффитс, спасибо за помощь! У меня работал следующий код:

y %>% mutate(stuff = map(data, ~xts(order.by = .x$date_time)))

# A tibble: 140 × 3
    counter               data     stuff
     <fctr>             <list>    <list>
1  06032013  <tibble [91 × 2]> <S3: xts>
2  62295051 <tibble [310 × 2]> <S3: xts>
3  81295014 <tibble [301 × 2]> <S3: xts>
4  81295015 <tibble [294 × 2]> <S3: xts>
5  81295091 <tibble [303 × 2]> <S3: xts>
6  81295092 <tibble [306 × 2]> <S3: xts>
7  81313062 <tibble [142 × 2]> <S3: xts>
8  81313063 <tibble [142 × 2]> <S3: xts>
9  82295046 <tibble [139 × 2]> <S3: xts>
10 82295050 <tibble [141 × 2]> <S3: xts>
# ... with 130 more rows

До сих пор не уверен на 100%, почему. Но эй, это сработало.

person thus__    schedule 20.12.2016