0
我使用lapply函数调用Spotify的API。我有一列albumids,我想从每个albumid中检索曲目名称。我这样做的方式是将albumid分隔成一个字符向量,然后运行并使用lapply函数调用字符向量中的每个值。这个问题是我不能把它放回原始数据框。Lapply回到原始数据框的字符向量
下面是一个例子:
我有一个数据帧,看起来像这样:
spotify<-df$`Album IDs`
:
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的列象下面创建的字符向量然后我创建了一个函数来检索每个相册ID的trackids,artistid,艺术家名称和曲目名称:
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
这样做的问题是,我可以不涉及回原来的数据帧,因为没有主键(ALBUMID)。我想我需要在原始的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
谢谢,没有意识到它是那么简单。欣赏它 –