2017-02-02 6 views
2

ベクトルの各要素の語順を変更したいと思います。具体的には、最初の単語が長さの異なるいくつかの要素の最後の単語になる別のベクトルを作成したいと思います。ベクトルの各要素の単語の並べ替え


データ

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()が動作しませんでした。


+0

1つの標準的な方法: 'サブ( " ^(\\ W +)(*)$"、 "\\ 2 \\ 1"、metadata1)' – Frank

+1

それは華麗だ@Frankソリューションも! –

答えて

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) 
+1

迅速で正確な回答をいただきありがとうございます!私は 'stringer :: word()'の解決策をとっていました。なぜなら、データでメタデータをより簡単に再配置できるからです。 –

関連する問題