2017-09-13 18 views
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 

回答

1

在你的函数get.tracks的末尾添加一列专辑。

... 
colnames(result) <- c("ID", "NAME", "ARTIST ID", "ARTIST NAME") 
result$`Album IDs` <- spotify 
return(result) 

然后,您可以使用Album IDs作为关键字重新合并为原始文件。

+0

谢谢,没有意识到它是那么简单。欣赏它 –

相关问题