Извлечь данные из r датафрейма - PullRequest
0 голосов
/ 28 августа 2018

У меня проблемы с извлечением данных из фрейма данных (ExhibitionPlannings_1) в R.

Фрейм данных выглядит следующим образом:

> str(exhibitionPlannings_1)
'data.frame':   3 obs. of  4 variables:
 $ date               : chr  "23.08.2018" "24.08.2018" "27.08.2018"
 $ exhibitionLocations:List of 3
  ..$ :'data.frame':    2 obs. of  17 variables:
  .. ..$ id                                  : chr  "ind-8cf04a9734132302f96da8e113e80ce5-0" "5"
  .. ..$ title                               : chr  "title1" "title2"
  .. ..$ street                              : chr  "street1" "street2"
  .. ..$ $$hashKey                           : chr  "object:57" "object:287"
  .. ..$ exhibitorID                         :List of 2
  .. .. ..$ : list()
  .. .. ..$ : list()
  .. ..$ zip                                 : chr  "" "32584"
  .. ..$ city                                : chr  "" "city2"
  .. ..$ latitude                            : chr  "" "12.345"
  .. ..$ exhibitors                          :List of 2
  .. .. ..$ : list()
  .. .. ..$ : list()
  .. ..$ distance2Neighbour                  : chr  "123 km" ""
  .. ..$ duration2Neighbour                  : chr  "0 Stunden, 0 Minuten" ""
  .. ..$ forum                               : logi  NA TRUE
  .. ..$ longitude                           : num  NA 1.23
  .. ..$ class                               : chr  NA ""
  .. ..$ distance2LastLocationInPlanning     : chr  NA "00 km"
  .. ..$ distanceValue2LastLocationInPlanning: int  NA 123456
  .. ..$ duration2LastLocationInPlanning     : chr  NA "0 Stunden, 0 Minuten"
  ..$ :'data.frame':    1 obs. of  17 variables:
  .. ..$ id                                  : int 3
  .. ..$ forum                               : logi FALSE
  .. ..$ exhibitorID                         :List of 1
  .. .. ..$ : list()
  .. ..$ title                               : chr "title3"
  .. ..$ street                              : chr "street3"
  .. ..$ zip                                 : chr "123456"
  .. ..$ city                                : chr "city3"
  .. ..$ latitude                            : num 12.3
  .. ..$ longitude                           : num 1.23
  .. ..$ class                               : chr ""
  .. ..$ exhibitors                          :List of 1
  .. .. ..$ : list()
  .. ..$ $$hashKey                           : chr "object:310"
  .. ..$ distance2LastLocationInPlanning     : chr "0 km"
  .. ..$ distanceValue2LastLocationInPlanning: int 123456
  .. ..$ duration2LastLocationInPlanning     : chr "0 Stunden, 0 Minuten"
  .. ..$ distance2Neighbour                  : chr ""
  .. ..$ duration2Neighbour                  : chr ""
  ..$ :'data.frame':    2 obs. of  17 variables:
  .. ..$ id                                  : chr  "ind-4dbe13088312d7841a318997b1426dd0-3" "5"
  .. ..$ title                               : chr  "title4" "title5"
  .. ..$ street                              : chr  "street4" "street5"
  .. ..$ $$hashKey                           : chr  "object:60" "object:287"
  .. ..$ exhibitorID                         :List of 2
  .. .. ..$ : int 
  .. .. ..$ : int  1 10 25 37 38 56 74
  .. ..$ zip                                 : chr  "" "123456"
  .. ..$ city                                : chr  "" "city5"
  .. ..$ latitude                            : chr  "" "12.345"
  .. ..$ exhibitors                          :List of 2
  .. .. ..$ :'data.frame':  0 obs. of  0 variables
  .. .. ..$ :'data.frame':  1 obs. of  8 variables:
  .. .. .. ..$ id          : int 1
  .. .. .. ..$ title       : chr "ABC"
  .. .. .. ..$ contentUri  : chr "uri.com"
  .. .. .. ..$ locationName:List of 1
  .. .. .. .. ..$ : chr "location Name"
  .. .. .. ..$ locationID  :List of 1
  .. .. .. .. ..$ : int 5
  .. .. .. ..$ image       : chr "www.image.com"
  .. .. .. ..$ class       : chr "favorite"
  .. .. .. ..$ $$hashKey   : chr "object:65"
  .. ..$ distance2LastLocationInPlanning     : chr  "12,3 km" "456 km"
  .. ..$ distanceValue2LastLocationInPlanning: int  12345 6789
  .. ..$ duration2LastLocationInPlanning     : chr  "00 Minuten" "0 Stunden, 00 Minuten"
  .. ..$ distance2Neighbour                  : chr  "0 km" ""
  .. ..$ duration2Neighbour                  : chr  "0 Stunden, 00 Minuten" ""
  .. ..$ forum                               : logi  NA TRUE
  .. ..$ longitude                           : num  NA 1.23
  .. ..$ class                               : chr  NA ""
 $ $$hashKey          : chr  "object:298" "object:438" "object:562"
 $ googleStaticMap    : chr  "https://maps.googleapis.com/maps/api/staticmap?123"| __truncated__

Как вы можете видеть, у "date" есть 3 даты, а "ExhibitionLocations" - это список из 3 элементов, каждый из которых представляет собой фрейм данных.

Я хотел бы добавить новый столбец для каждого из этих информационных кадров. Этот столбец должен содержать соответствующую дату.

Результат должен выглядеть следующим образом:

date | id | title | street 
23.08.2018 | "ind-8cf04a9734132302f96da8e113e80ce5-0" | "title1" | "street1"
23.08.2018 | "5" | "title2" | "street2"
24.08.2018 | 3 | "title3" | "street3"
27.08.2018 | "ind-4dbe13088312d7841a318997b1426dd0-3" | "title4" | "street4"
27.08.2018 | "5" | "title5" | "street5"  

Я был бы рад, если бы вы могли предложить решение с картой ().

Большое спасибо заранее!

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете использовать mapply, чтобы применить функцию к двум аргументам (вектор символов и список data.frame), а затем связать результат mapply с помощью do.call:

.
# data.frame simulation

df <- structure(list(date = c("23.08.2018", "24.08.2018", "27.08.2018"
), dfs = structure(list(structure(list(id = structure(2:1, .Label = c("5", 
"ind-8cf04a9734132302f96da8e113e80ce5-0"), class = "factor"), 
    title = structure(1:2, .Label = c("title1", "title2"), class = "factor"), 
    street = structure(1:2, .Label = c("street1", "street2"), class = "factor")), class = "data.frame", row.names = c(NA, 
-2L)), structure(list(id = structure(1L, .Label = "3", class = "factor"), 
    title = structure(1L, .Label = "title3", class = "factor"), 
    street = structure(1L, .Label = "street3", class = "factor")), class = "data.frame", row.names = c(NA, 
-1L)), structure(list(id = structure(2:1, .Label = c("5", "ind-4dbe13088312d7841a318997b1426dd0-3"
), class = "factor"), title = structure(1:2, .Label = c("title4", 
"title5"), class = "factor"), street = structure(1:2, .Label = c("street4", 
"street5"), class = "factor")), class = "data.frame", row.names = c(NA, 
-2L))), class = "AsIs")), class = "data.frame", row.names = c(NA, 
-3L))

# extract and concatenate the data    
dfs <- mapply(function(x, y) {
    y$date <- x
    y
  } , df$date, df$dfs, SIMPLIFY = FALSE)

do.call(rbind, dfs)

Выход:

                                                 id  title  street       date
23.08.2018.1 ind-8cf04a9734132302f96da8e113e80ce5-0 title1 street1 23.08.2018
23.08.2018.2                                      5 title2 street2 23.08.2018
24.08.2018                                        3 title3 street3 24.08.2018
27.08.2018.1 ind-4dbe13088312d7841a318997b1426dd0-3 title4 street4 27.08.2018
27.08.2018.2                                      5 title5 street5 27.08.2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...