矩阵的每列中的反向元素不反转列顺序

问题描述:

使用R,我想将每列中的所有元素反转为矩阵的单个行。我可以将行顺序反转(这不是我想要的),但不是行中的元素。矩阵的每列中的反向元素不反转列顺序

创建例如矩阵

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.reversed <- rev(my.matrix[my.matrix[1,], ]) 

错误my.matrix [my.matrix [1],] :下标越界

我想得到的是:

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

我们可能需要一些字符串操作。假设仅存在3中的原始数据集的字符,我们可以在sub捕获每个字符作为一组((.))和反向捕获组的顺序('\ 3 \ 2 \ 1' )

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

更通用的方法是使用字符串分割成单个字符,然后revpaste

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

或者Biostrings

library(Biostrings) 
my.matrix[1,] <- reverse(my.matrix[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

谢谢!弦乐做了我所需要的。 – MycoP

你可以使用stringi::stri_reverse。这段代码假设唯一的另一行是row2,它只包含单个字符,所以反转并不重要。如果不是这种情况,则需要将该功能仅应用于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