一个数据帧的数据帧列表

时间:2016-10-11 14:29:18

标签: r dataframe plyr

免责声明:我知道之前已经问过this question。这个答案中提供的答案在过去对我有用,但由于某种原因现在已经停止了。

我正在从Mailchimp API中提取营销电子邮件统计信息。过去半年左右我一直这样做。然而,在过去的两个月里,我相信我拉的结构已经改变,因此,我的代码不再有效,我无法弄清楚原因。我相信它与我收到的数据框列表中的嵌套数据帧有关。

以下是我的代码示例以及生成的数据框列表。我从代码和图片中删除了敏感信息:

library(httr)
library(jsonlite)
library(plyr)

#Opens-----------
opens1 <- GET("https://us4.api.mailchimp.com/3.0/reports/***ReportNumber***/sent-to?count=4000",authenticate('***My Company***', '***My-Password***'))
opens1 <- content(opens1,"text")
opens1 <- fromJSON(opens1)

enter image description here

然后我运行opens1 <- ldply(opens1, data.frame),我收到以下错误:

Error in allocate_column(df[[var]], nrows, dfs, var) : 
Data frame column 'merge_fields' not supported by rbind.fill

我尝试使用并查找rbind.fill()以及帖子顶部链接答案中描述的其他方法,但无济于事。我对merge_fields变量的错误解释是什么,或者我离开了,我该如何纠正?

我只想从opens1列表中获取所有变量的一个数据框。

感谢您提供任何帮助,请随时提出任何澄清问题!

1 个答案:

答案 0 :(得分:1)

快速浏览一下,这似乎对我有用:

library(httr)
campaign_id <- "-------"
apikey = "------"
url <- sprintf("https://us1.api.mailchimp.com/3.0/reports/%s/sent-to", campaign_id)
opens <- GET(url, query = list(apikey = apikey, count = 4000L))
lst <- rjson::fromJSON(content(opens, "text"))
df <- dplyr::bind_rows(
  lapply(lst$sent_to, function(x) 
    as.data.frame(t(unlist(x)), stringsAsFactors = F)
))