我正在尝试编写一个函数来从 Spotify 的 API 获取专辑数据,以获取专辑和艺术家的数据框。因为数据集中有一些拼写错误,我需要使用模糊匹配函数(如agrepl
)。
然而,一些艺术家,如 Absu,拥有的专辑按照agrepl
's 的标准是相同的。例如,Absu 有一张名为“Absu”的专辑和另一张名为“Abzu”的专辑。我只想要其中 1 个的数据,但我最终会得到两者的数据。我知道您可以更改max.distance
,agrepl
但我需要将它设置得相当低以解决更多的拼写错误。
是否有预先构建的功能或简单的方法来告诉 R
如果album_name
与mydata[["Album"]]
过滤器完全匹配并继续前进:尝试找到一个接近匹配的过滤器?
这是我尝试过但不起作用的方法:
get_album_data <- function(x) {
get_artist_audio_features(mydata$Artist[x], return_closest_artist = TRUE) %>%
ifelse(album_name %in% mydata$Album[x],
filter(mydata$Album[x] == album_name,
filter(agrepl(mydata$Album[x], album_name, ignore.case = TRUE))))
}
这就是我的代码在没有尝试任何特殊的情况下的样子
library(dplyr)
library(spotifyr)
library(purrr)
# from Spotify's developer page
Sys.setenv(SPOTIFY_CLIENT_ID = "xxx")
Sys.setenv(SPOTIFY_CLIENT_SECRET = "xxx")
access_token <- get_spotify_access_token()
Artist <- c("Spiritualized", "Fleet Foxes", "The Avalanches", "Absu")
Album <- c("Sweet Heart, Sweet Light", "Helplessness Blues", "Wildflower", "Abzu")
mydata <- data_frame(Artist, Album)
get_album_data <- function(x) {
get_artist_audio_features(mydata[["Artist"]][x], return_closest_artist = TRUE) %>%
filter(agrepl(mydata[["Album"]][x], album_name, ignore.case = TRUE)) %>%
mutate(mydata[["Artist"]][x])
}
有任何想法吗?谢谢