Добавление переменной в датафрейм в списке в списке с помощью R - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть список данных социальных сетей о новостных статьях, который сохраняется в списке для каждого новостного издания. Список добавляется каждый раз, когда собирается больше данных. До настоящего времени данные добавлялись в каждый список 9 раз.

Например: это проблеск результатов одного списка

glimpse(buzzfeed200125[[1]])
List of 6
 $ results :'data.frame': 100 obs. of 45 variables:
            ..$ author_name: chr [1:100] "Amber Jamieson, Mary Ann Georgantopoulos, Marie Telling, Zorro Maplestone, Stephanie K. Baer, Hazel Shearing" "Stephanie K. Baer, Hazel Shearing" "Jason Leopold, Anthony Cormier" "Tasneem Nashrulla" ...
            ..$ youtube_trending_score: logi [1:100] NA NA NA NA NA NA ...
            ..$ alexa_rank: int [1:100] 1942 1942 1584 4354 1541 4354 1541 1264 4288 1584 ...
            ..$ pinterest_shares: int [1:100] 493 8 178 13 201 0 0 15 99 0 ...
            ..$ num_words: int [1:100] 1559 836 1506 1351 874 1351 874 925 392 1602 ...
 $ suggested_language: NULL
 $ total_pages       : int 71
 $ total_results     : num 7083
 $ display_code      : NULL
 $ search_type       : chr "domainSearch"

Как видите - результаты фактический сбор данных происходит в первую очередь в первом объекте в списке - фрейме данных с именем results

glimpse(buzzfeed200125[[1]][[1]])
Observations: 100
Variables: 45
$ author_name  <chr> "Amber Jamieson, Mary Ann Georgantopoulos, Marie Telling, Zorro Maplesto…
$ alexa_rank  <int> 1942, 1942, 1584, 4354, 1541, 4354, 1541, 1264, 4288, 1584, 4366, 2759, …
$ pinterest_shares  <int> 493, 8, 178, 13, 201, 0, 0, 15, 99, 0, 0, 22, 8, 26, 2, 136, 0, 39, 0, 7…
$ num_words   <int> 1559, 836, 1506, 1351, 874, 1351, 874, 925, 392, 1602, 392, 1366, 548, 5…
$ twitter_shares  <int> 3170, 2883, 149984, 4098, 754, 2, 4, 1328, 7925, 44, 1, 5262, 5017, 8248…
$ love_count  <int> 1004, 55009, 2457, 90, 33386, NA, NA, 3779, 31648, NA, NA, 9226, 312, 12…
$ language  <chr> "en", "en", "en", "en", "en", "en", "en", "en", "en", "en", "en", "en", …

У меня также есть список меток времени POSIX для каждого часа, когда были собраны данные

collection.time
collection.time[1:9]
[[1]]
[1] "2020-01-31 08:44:23 EST"

[[2]]
[1] "2020-01-31 10:50:01 EST"

[[3]]
[1] "2020-01-31 11:50:01 EST"

[[4]]
[1] "2020-01-31 12:50:00 EST"

[[5]]
[1] "2020-01-31 13:50:01 EST"

[[6]]
[1] "2020-01-31 14:50:01 EST"

[[7]]
[1] "2020-01-31 15:50:01 EST"

[[8]]
[1] "2020-01-31 16:50:01 EST"

[[9]]
[1] "2020-01-31 17:50:01 EST"

Я хочу добавить метку времени в качестве переменной в кадры данных результатов, чтобы можно было раскрутить списки и преобразовать их в панель временных рядов.

Моя цель для конечного фрейма данных выглядит так:

glimpse(df)

df : data.frame: 37800 obs. of 45 variables:
     .$ time.stamp chr [1:37800] "2020-01-31 08:44:23 EST" "2020-01-31 08:44:23 EST" "2020-01-31 08:44:23 EST" "2020-01-31 08:44:23 EST" "2020-01-31 08:44:23 EST" ...
     .$ author_name: chr [1:37800] "Amber Jamieson, Mary Ann Georgantopoulos, Marie Telling, Zorro Maplestone, Stephanie K. Baer, Hazel Shearing" "Stephanie K. Baer, Hazel Shearing" "Jason Leopold, Anthony Cormier" "Tasneem Nashrulla" ...
     .$ youtube_trending_score: logi [1:37800] NA NA NA NA NA NA ...

Мне удалось извлечь и создать большой фрейм данных из всех источников, но без добавления переменной time.stamp. Вот мой код:

load(file = "source_list")

source_list - это список, который содержит списки для каждого источника новостей

Итак, структура:

source_list[[source]][[time collected]][[results data frame]]

tab1 <- tibble(source_list) %>% unnest_wider(source_list) %>% unnest(results)

tab1

# A tibble: 37,795 x 50
   author_name youtube_trendin… alexa_rank pinterest_shares num_words twitter_shares love_count language
   <chr>                  <dbl>      <int>            <int>     <int>          <int>      <int> <chr>   
 1 The Babylo…               NA       9019               11       251          22991       3130 en      
 2 The Babylo…               NA      23970                9       306            696       1551 en      
 3 The Babylo…               NA      17002               13       343           2504       1687 en      
 4 The Babylo…               NA      19717               10       233          11219       2897 en      
 5 The Babylo…               NA      13077               24       241           8180       1418 en      
 6 The Babylo…               NA      47714                4       228            578        395 en      
 7 The Babylo…               NA      22741                5       261           3613       2132 en      
 8 The Babylo…               NA      14996               12       231           1646         69 en      
 9 The Babylo…               NA      26529                2       350           3773       1265 en      
10 The Babylo…               NA      17002               10       277           6995       6863 en      
# … with 37,785 more rows, and 42 more variables

Но я не могу понять, как правильно добавить метки времени в качестве переменной.

Я пытался использовать rep для повторения меток времени правильное количество раз, но пока ничего не работает.

Это выглядело примерно так:

time.stamp <- rep(rep(collection.time[1:9], each = 100),378)

результирующий объект не был той же длины, что и tab1 фрейм данных

Любая помощь в упрощении этого процесса или добавлении переменной отметки времени в окончательный набор данных будет с благодарностью.

1 Ответ

1 голос
/ 21 февраля 2020

Возможно, было бы проще добавить метку времени к каждому фрейму данных перед его отменой?

buzzfeed200125 <- mapply(function(x, y){ x$results$time <- rep(y, nrow(x$results)); x;},
                         buzzfeed200125, collection.time, SIMPLIFY = FALSE)

Это должно дать вам желаемый вывод метки времени для каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...