对向量的每个元素中的单词重新排序
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)
我想更改向量中每个元素的词序。具体来说,我想制作另一个向量,其中第一个词现在是许多长度不同的元素的最后一个词。
数据
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)