【发布时间】:2017-09-13 17:29:05
【问题描述】:
我正在使用 lapply 函数来调用 Spotify 的 API。我有一列专辑,我想从每个专辑中检索曲目名称。我这样做的方法是将白蛋白分离成一个字符向量,然后运行并使用 lapply 函数调用字符向量中的每个值。问题在于我无法将其放回原始数据框中。
这是一个例子:
我有一个如下所示的数据框:
df
Artist ID Artist Name Album Name Album IDs
1 5lDUVqxXYEOAf12p0N2kVT Jared Dylan We Can't 16PsUE4xzqxIvmNIlwQzmK
2 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Love Is a Game 4NYvHAON7Zo4KC2BMn5rlI
3 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Enjoy the View 5AipKv8MFdERzk9xxEN3OK
4 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Luna Loves Me 3u4XXqFOiltaNXyKAhkzGN
5 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Symphony 0x5PQLx5tFNEpfhQnXhU8t
6 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g
然后,我从专辑 ID 列创建了一个字符向量,如下所示:
spotify<-df$`Album IDs`
然后我创建了一个函数来检索每个专辑 ID 的曲目 ID、艺术家 ID、艺术家姓名和曲目名称:
get.tracks <- function(spotify){
albumTracksURL <- paste("https://api.spotify.com/v1/albums/", spotify, "/tracks?limit=50", sep="")
getTracks <- GET(albumTracksURL, add_headers(Authorization = HeaderValue))
albumTracks <- jsonlite::fromJSON(toJSON(content(getTracks)))
ids <- data.frame(matrix(unlist(albumTracks$items$id),
nrow=albumTracks$total, byrow=T),stringsAsFactors=FALSE)
names <- data.frame(matrix(unlist(albumTracks$items$name),
nrow=albumTracks$total, byrow=T),stringsAsFactors=FALSE)
artists<-albumTracks$items$artists
artists1<-do.call(rbind, lapply(artists, function(x) do.call(cbind, lapply(x[c('id', 'name')], toString))))
result <- cbind(ids, names, artists1)
colnames(result) <- c("ID", "NAME", "ARTIST ID", "ARTIST NAME")
return(result)
}
df <- lapply(spotify, get.tracks)
result <- do.call(rbind, df)
result_final<-result
这是这个结果的样子:
result_final
ID NAME ARTIST ID ARTIST NAME
1 2YjOdgzqMIokknjOLS9ksc We Can't 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
2 5zSJepyr4V94yICIwhEBNK Love Is a Game 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
3 4o7qeWp4eQflplPVtoiJhM Enjoy the View 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
4 4LtSJDlu8UvM4hNlJsSj31 Luna Loves Me 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
5 4a91BtkczDVQdgKWUiwuyy Symphony 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
6 36XHtu9IgcoUEylPDYfPpr In Panic 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
7 6LEgJv1ClgvjDzmr7WG4hE Mistakes 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
8 5GxzbBprsHtk05qQeATGZR Ready, Set, Stun 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
9 1PHIPb4HyaatPqQfw2t288 Drive Me Crazy 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
10 6M9hgVrs4oj4YCFdXod1u4 Always Faithful 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
问题在于我无法将其与原始数据帧相关联,因为没有主键(专辑)。我认为我需要在原始 df 上执行一个 for 循环或不同的应用函数,而不是将其作为字符向量分离出来,但我不知道该怎么做。目标是使最终结果如下所示:
Artist.ID Artist.Name Album.Name Album.IDs ID NAME ARTIST.ID ARTIST.NAME
1 5lDUVqxXYEOAf12p0N2kVT Jared Dylan We Can't 16PsUE4xzqxIvmNIlwQzmK 2YjOdgzqMIokknjOLS9ksc We Can't 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
2 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Love Is a Game 4NYvHAON7Zo4KC2BMn5rlI 5zSJepyr4V94yICIwhEBNK Love Is a Game 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
3 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Enjoy the View 5AipKv8MFdERzk9xxEN3OK 4o7qeWp4eQflplPVtoiJhM Enjoy the View 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
4 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Luna Loves Me 3u4XXqFOiltaNXyKAhkzGN 4LtSJDlu8UvM4hNlJsSj31 Luna Loves Me 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
5 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Symphony 0x5PQLx5tFNEpfhQnXhU8t 4a91BtkczDVQdgKWUiwuyy Symphony 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
6 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 36XHtu9IgcoUEylPDYfPpr In Panic 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
7 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 6LEgJv1ClgvjDzmr7WG4hE Mistakes 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
8 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 5GxzbBprsHtk05qQeATGZR Ready, Set, Stun 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
9 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 1PHIPb4HyaatPqQfw2t288 Drive Me Crazy 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
10 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 6M9hgVrs4oj4YCFdXod1u4 Always Faithful 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
【问题讨论】: