在R中,使用模式将字符对象转换为列表或数据帧以提取列名称和值

在R中,使用模式将字符对象转换为列表或数据帧以提取列名称和值,r,rcurl,google-books,R,Rcurl,Google Books,我有一个书名和作者列表,我正在使用Google books API访问关于这些书的其他信息(例如完整书名、ISBNs等),只有当Google返回的第一个项目的“作者姓名”字段在我的原始列表中包含我的作者姓名时,我才想将Google的信息复制到我的原始列表中 我的问题是,是否有一种简单的方法可以根据google结果中的模式将查询结果(字符对象)转换为表或数据帧。下面是一个例子 library(RCurl) result<-getURL("https://www.googleapis.com/

我有一个书名和作者列表,我正在使用Google books API访问关于这些书的其他信息(例如完整书名、ISBNs等),只有当Google返回的第一个项目的“作者姓名”字段在我的原始列表中包含我的作者姓名时,我才想将Google的信息复制到我的原始列表中

我的问题是,是否有一种简单的方法可以根据google结果中的模式将查询结果(字符对象)转换为表或数据帧。下面是一个例子

library(RCurl)
result<-getURL("https://www.googleapis.com/books/v1/volumes?q=fellowship%20of%20the%20ring%20tolkien&startIndex=0",ssl.verifyhost=F,ssl.verifypeer=F,followlocation=T)

print(result)
最终,我希望能够将值从新列表/表/数据帧复制到另一个数据帧,如果某些值匹配(例如,authors值包括与另一个数据帧中的值的匹配),类似于循环中的以下摘录:

if(grepl(books$auth1last[i],result.df$authors[1])==TRUE){
    books$isbn13[i] = result.df$isbn13[1] 
}else{
    books$isbn13[i] = NA} 

是否有一种优雅的方法可以将character对象转换为更像一个有组织的列表/表格/df,只需几行,或者我必须使用rm_-between之类的东西用单独的行提取每个列名和值?谢谢

您可以使用
jsonlite
包将返回的json字符串转换为列表。您只需删除换行符即可使其正常工作

例如:

library(RCurl)
result <- getURL("https://www.googleapis.com/books/v1/volumes?q=fellowship%20of%20the%20ring%20tolkien&startIndex=0",ssl.verifyhost=F,ssl.verifypeer=F,followlocation=T)

result_no_breaks <- gsub("\\n", " ",result)
json_list <- jsonlite::fromJSON(result_no_breaks)
库(RCurl)

结果您可以直接在URL上调用
jsonlite::fromJSON
,而不使用RCurl。但是,结果列表的data.frames中仍然包含data.frames,因此需要进行一些工作才能解包。你们都是对的。据我所知,上面@Adam Spannbauer发布的答案与代码:library(jsonlite)json.result的结果完全相同
library(RCurl)
result <- getURL("https://www.googleapis.com/books/v1/volumes?q=fellowship%20of%20the%20ring%20tolkien&startIndex=0",ssl.verifyhost=F,ssl.verifypeer=F,followlocation=T)

result_no_breaks <- gsub("\\n", " ",result)
json_list <- jsonlite::fromJSON(result_no_breaks)