对向量的每个元素中的单词重新排序

Reorder words in each element of a vector

我想更改向量中每个元素的词序。具体来说,我想制作另一个向量,其中第一个词现在是许多长度不同的元素的最后一个词。


数据

metadata1 <- c("reference1 an organism", 
               "reference2 another organism here",
               "reference3 yet another organism is here")

期望的结果

metadata2 <- c("an organism reference1", 
               "another organism here reference2",
               "yet another organism is here reference3")

我的尝试

metadata2 <- lapply(strsplit(metadata1," "), function(x) paste(x[c(2,3,4,5,1)]))



我尝试使用 lapply() 使用 strsplit() 以空格分隔每个元素,然后使用顺序索引将它们粘贴回一起。这会以正确的顺序获取单词,但是 returns 一个列表,其中单词是单独的元素,并且因为某些元素比其他元素长,所以当索引号高于单词数时,我会得到 "NA"s在那个元素中。我还尝试了 sapply() 哪个 returns 矩阵和 tapply() 哪个不起作用。


library(stringr)
paste(word(metadata1,2, -1), word(metadata1,1), sep = " ")
# [1] "an organism reference1"                 
# [2] "another organism here reference2"       
# [3] "yet another organism is here reference3"

# OR

sapply(metadata1, function(x){ y = unlist(strsplit(x, " "))
                           paste(c(y[-1],y[1]),collapse = " ")
                           })


# OR ( this is purely @Frank's answer)( Shall remove when he puts it as an answer)
sub("^(\w+) (.*)$", "\2 \1", metadata1)