我正在从pipl.com解析JSON对象。 具体来说,我在jsonlite库下使用lapply fromJSON传递了一个CSV联系人到api。然后我想将特定元素绑定到平面数据框中。我已经尝试了下面的rbind mapply,sapply和lapply,但是这并不像我期望的那样工作,而不是下面的任何其他元素。我已尝试使用' mini.test [1] $条记录$ user_ids'语法,但原始联系人数据框有数百条记录,所以我认为循环将能够提取我想要的元素。
我希望每个用户只找到linkedin,facebook和twitter的用户名。因此我认为某种grepl会帮助我对它进行子集化。我创建了该矢量并在下面发布了代码。
我已经阅读了多篇关于不同的r-bloggers文章" apply"函数,查看R Cookbook pdf,并阅读stackoverflow上的问题。我很难过,所以非常感谢任何帮助。
library(jsonlite)
#sample data
first<-c('Victor','Steve','Mary')
last<-c('Arias','Madden','Johnson')
contacts<-cbind(first,last)
#make urls
urls<-paste('http://api.pipl.com/search/v3/json/?first_name=',contacts[,1],'%09&last_name=',contacts[,2],'&pretty=True&key=xxxxxxx', sep='')
#Parse api
mini.test<-lapply(urls,fromJSON,simplifyMatrix=TRUE,flatten=TRUE)
#Data frame vector name
names <- do.call(rbind, lapply(mini.test, "[[", 5))
display <-do.call(rbind, lapply(names, "[[", 3))
#Grepl for 3 sources
records <- lapply(mini.test, "[[", 7)
twitter <-grepl("twitter.com",records,ignore.case = TRUE)
facebook <-grepl("facebook.com",records,ignore.case = TRUE)
linkedin <-grepl("linkedin.com",records,ignore.case = TRUE)
我知道因为pipl的回复,联系人可能有多个个人资料用户名。为此,我只需将其作为字符串取消列出,而不是数据框中的嵌套列表。最后我想要一个如下所示的平面文件。再次,我真诚地感谢你的帮助。我已经读了3天而没有太大的成功。
twitter <- c('twitter.username1','twitter.username2','NA')
linkedin <- c('linkedin.username1','linedin.username2','linkedin.username3')
facebook <- c('fb1','fb2','fb3,fb3a')
df<-cbind(display,twitter,linkedin,facebook)