矩阵的每列中的反向元素不反转列顺序
问题描述:
使用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"
更通用的方法是使用字符串分割成单个字符,然后rev
和paste
回
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"
答
你可以使用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。
谢谢!弦乐做了我所需要的。 – MycoP