【问题标题】:List of Data Frames to One Data Frame数据帧列表到一个数据帧
【发布时间】:2016-10-11 14:29:18
【问题描述】:

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

我正在从 Mailchimp API 中提取营销电子邮件统计信息。过去半年左右我一直在这样做。然而,在过去的 2 个月里,我相信我拉取的结构发生了变化,因此我的代码不再有效,我不知道为什么。我相信这与我收到的数据框列表中的嵌套数据框有关。

这是我的代码示例和生成的数据框列表。我已从我的代码和图像中删除敏感信息:

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)

然后我运行opens1 &lt;- 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 列表中获取所有变量的一个数据框。

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

【问题讨论】:

  • 如果您真的需要帮助,您需要在示例输入数据中包含某种reproducible example(数据图片没有帮助)。该数据看起来不是很平坦。甚至不确定预期的输出是什么。
  • @MrFlick 如果可以的话,我会生成可重现的样本数据,但我的大部分问题是处理我什至在这里看到的内容。当我尝试运行dput() 时,即使只有 1 行,我也会从控制台获得大量数据。我想我假设在更改 API 之前,生成的 opens1 是一个简单的数据帧平面列表,但现在已经转移到子数据帧中。我的问题是如何使用带有子数据框的数据框列表结构(或者我什至可以)?

标签: r dataframe plyr


【解决方案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)
)) 

【讨论】:

  • 感谢您的回答建议。我能够成功运行所有内容,直到 lapply() 函数为我提供以下错误的最后一部分:Error in eval(substitute(expr), envir, enclos) : Can not automatically convert from character to logical in column "V1".
  • 也许试试rjson::fromJSON?在一致的结果方面似乎更可靠(?)
  • 成功了!接受了你的回答。我唯一的后续问题是因为您对该主题非常了解,如果您有时间,则在接受的答案中使用偏移量。当我尝试查询 4000 条记录时,它会引发错误。基本上,我发现任何 = 500 时,它也会引发 500 错误。因为我有大约 3000 条记录要查询,那么获取所有记录的最佳方法是什么?
  • 我无法复制它。我的列表是大约 2000 个订阅者,如果我将计数设置为 4000,那么 length(lst$sent_to) 是 1979,这是我联系的收件人数量。也许您遇到了某种速率限制?我会询问mailchimp的支持。 (我很少使用API​​,所以对它了解不多……)
  • 感谢您查看。非常感谢您今天提供的所有帮助!
猜你喜欢
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多