“使用R从API提取数据”的后续操作

时间:2019-02-11 21:05:05

标签: r json list dataframe extraction

我拥有的代码(来自A continuation of... Extracting data from an API using 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。

在示例代码中,我添加了一些易于获取的变量,数字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。从“即时”开始,我需要“ namn”。基本上,我需要最终数据库如下所示:

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

1 个答案:

答案 0 :(得分:0)

您需要自己处理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, .)