如何通过循环agrepl并用向量替换匹配来清理Aerosmith的唱法?

时间:2017-09-08 22:08:10

标签: r loops indexing grep gsub

我从唱片网站上删除了一些数据,以制作Aerosmith歌曲类别的信息图表。数据集有一个歌曲变量,其中包含许多随机/不需要的字符,一些标点符号和一些行在列中有多首歌曲。

我尝试在没有任何地方的情况下,使用矢量' y'循环播放歌曲,找到大概匹配并将值替换为匹配' y'。我不确定for循环是否是最佳方法,而且基本上我处于停滞状态。

下面的代码是一个可重现的数据集,以及我用来搜索和替换的代码。

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()

这是我用代码制作的进展,它似乎适用于向量&#39; y&#39;只包含1个值。

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

1 个答案:

答案 0 :(得分:1)

需要什么: - )

# 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
}