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

时间:2017-02-02 18:05:11

标签: r regex lapply stringr strsplit

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


数据

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()用空格分隔每个元素,然后使用订单索引将它们粘贴在一起。这会以正确的顺序获取单词,但会返回一个列表,其中单词是单独的元素,并且因为某些元素比其他元素长,所以当索引号高于该元素中的单词数时,我得到“NA”。我还尝试了sapply(),它返回一个矩阵,tapply()不起作用。


1 个答案:

答案 0 :(得分:0)

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)