2017-04-11 10 views
1

Rを使用して、行列の1行について、各列のすべての要素を逆にしたいとします。私は行の順序を逆にすることができます(これは私が望むものではありません)が、行の要素ではありません。逆行列なしの行列の各要素の逆の要素

my.matrixに

my.matrix.reversed <- rev(my.matrix[my.matrix[1,], ]) 

エラー切れ端=

snips <- c("CCA", "ATC", "TTC") 
row2 <- 1:3 
my.matrix <- as.matrix(rbind(snips, row2)) 
my.matrix 

[,1] [,2] [,3] 

snips "CCA" "ATC" "TTC" 
row2 "1" "2" "3" 

行の要素を逆例行列作成[]、my.matrix [1,2]下付き文字:

私が得たいものは:

答えて

0

文字列の操作が必要な場合があります。 ( `\ 3 \ 2 \ 1' )元のデータセット内の唯一の3文字があると仮定すると、我々はsubにグループ((.))として各文字をキャプチャし、キャプチャグループの順序を逆にすることができます

my.matrix[1,] <- sub("(.)(.)(.)", "\\3\\2\\1", my.matrix[1,]) 
my.matrix 
#  [,1] [,2] [,3] 
#snips "ACC" "CTA" "CTT" 
#row2 "1" "2" "3" 

より一般的なアプローチは、それが

my.matrix[1,] <- sapply(strsplit(my.matrix[1,], ""), function(x) paste(rev(x), collapse="")) 

それともBiostrings

を使用してバック paste rev、その後、個々の文字に文字列を分割することとなり
library(Biostrings) 
my.matrix[1,] <- reverse(my.matrix[1,]) 
1

一つのアプローチは、文字列を逆にする「stringi」のように、文字列操作のパッケージのいずれかを使用することです:

library(stringi) 
my.matrix[1, ] <- stri_reverse(my.matrix[1, ]) 
my.matrix 
#  [,1] [,2] [,3] 
# snips "ACC" "CTA" "CTT" 
# row2 "1" "2" "3" 
+0

ありがとう! stringiは私が必要としていたものとまったく同じでした。 – MycoP

0

あなたはstringi::stri_reverseを使用することができます。このコードでは、他の行のみがrow2であると想定しています.1文字しか含まれていないため、リバーサルは関係ありません。そうでない場合は、snips行にのみ関数を適用する必要があります。

library(stringi) 
apply(my.matrix, 1:2, function(x) stri_reverse(x)) 

     [,1] [,2] [,3] 
snips "ACC" "CTA" "CTT" 
row2 "1" "2" "3" 

他の多くのソリューションat this question

関連する問題