r语言 - 如何通过循环 agrepl 并用矢量替换火柴来清理 Aerosmith 的唱片目录?



我已经从唱片网站上删除了一些数据,以使Aerosmith的歌曲类别的信息图与使用。该数据集的歌曲变量具有许多随机/不必要的字符,一些标点符号和某些行中有多个歌曲。

我正在尝试,而无需任何地方,用向量'y'绕过歌曲,找到近似匹配项,然后用价值'y'替换匹配。我不确定循环是否是最好的方法,基本上我处于停滞状态。

下面的代码是可重现的数据集,也是我用于搜索和替换的代码。

y <- c('Eat the Rich','Cry'n','Dream On','Crazy')
set.seed(123)
alpha <- data_frame(
 songs= paste0(sample(c('walkthisway','adfkbjf','dudelookslikealady','cryn','eattherich'),100,replace=T),sample(c('aadfa','aghnds','crazy','wwrrsdg'),100,replace=T)),
 album=sample(c('Toys in the Attic','Get a Grip','Greatest Hits'),100,replace=T))
alpha %>% head()

这是我用代码取得的进步,当向量'y'仅包含1个值时,它似乎有效。

alpha[[i]][agrepl(y,alpha[[i]])] <- y

需要什么: - )

# Remove special characters
# In this case " " and "'"
foo <- gsub(" |'", "" , y)
# Transform to lower case
foo <- tolower(foo)
for(i in foo) {
    # Get original song name
    bar <- y[which(foo == i)]
    # Find matches and replace with original song
    alpha$songs[grep(i, alpha$songs)] <- bar
}

最新更新