Продолжение «Извлечение данных из API с использованием R» - PullRequest
0 голосов
/ 12 февраля 2019

Код, который у меня есть (отсюда Продолжение ... Извлечение данных из API с использованием R ) дает очень сложный вывод.Я могу извлечь почти все, что мне нужно, за исключением data.frame, который вложен в список.

Ничего не делая, он дает мне такую ​​ошибку:

Ошибка в .rowNamesDF<- (x, значение= значение): дубликаты 'row.names' не допускаются. Дополнительно: Предупреждение: неуникальные значения при установке 'row.names': '1', '10', '11', '12', '13', «14», «15», «16», «17», «18», «19», «2», «20», «3», «4», «5», «6», «7 ',' 8 ',' 9 '

Если я попытаюсь сгладить или удалить список, он получит значение NULL.

В примере кода я добавил некоторые переменные, которые легкоget и number 42 - это «dokintressent», из которого мне нужно «intressent», список имен для каждого случая.Я должен запустить API из шведского законодательства полдюжины раз, но это хитрее.

Когда я удаляю 42, он отлично делает data.frame.

my_dfs1 <- lapply(1:207, function(i){
  my_url <- paste0("http://data.riksdagen.se/dokumentlista/?sok=&doktyp=mot&rm=&from=2017-01-01&tom=2017-12-31&ts=&bet=&tempbet=&nr=&org=&iid=&webbtv=&talare=&exakt=&planering=&sort=rel&sortorder=desc&rapport=&utformat=json&a=s&p=", i)
  r1 <- GET(my_url)
  r2 <- rawToChar(r1$content)
  r3 <- fromJSON(r2)
  r4 <- r3$dokumentlista$dokument
  return(r4)
})

df <- my_dfs1 %>% lapply(function(df_0){
  df_0[c(12:14, 18, 42)]
}) %>% do.call(rbind, .)

РЕДАКТИРОВАТЬ: я заметил, что данные, которые я хочу, на самом деле несколько data.frames для каждого случая.Из "интереса" мне нужен "намн".По сути, мне нужна итоговая база данных, чтобы она выглядела так:

                     V12     V13    V14    V18    Namn
    Motion 1                                     c(name1, name2)

1 Ответ

0 голосов
/ 13 февраля 2019

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

Вы можететакже, если это работает лучше для вас, вставьте имена вместе, например, через '-', и тогда intressent будет простым символьным вектором.

df <- my_dfs1 %>% lapply(function(df_0){
  #choose the columns you want
  return_df <- df_0[c(12:14, 18)]
  # work on intressent
  return_df$namn <- df_0$dokintressent$intressent %>% 
    lapply(function(x)list(x$namn)) %>% 
    do.call(rbind, .)                    # careful here a simple unlist won't work
  return(return_df) }) %>% 
  do.call(rbind, .)
...