"Extracting data from an API using R" 的后续行动
A follow-up to "Extracting data from an API using R"
我的代码(来自这里 )给出了非常复杂的输出。除了嵌套在列表中的 data.frame 之外,我几乎可以提取所有我需要的东西。
没有做任何事情,它给了我这个错误:
.rowNamesDF<-
(x, value = value) 中的错误:
不允许重复 '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。从"intressent"开始,我需要"namn"。基本上,我需要最终的数据库如下所示:
V12 V13 V14 V18 Namn
Motion 1 c(name1, name2)
您需要自己处理 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, .)
我的代码(来自这里
没有做任何事情,它给了我这个错误:
.rowNamesDF<-
(x, value = value) 中的错误:
不允许重复 '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。从"intressent"开始,我需要"namn"。基本上,我需要最终的数据库如下所示:
V12 V13 V14 V18 Namn
Motion 1 c(name1, name2)
您需要自己处理 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, .)