首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵中的每个元素中的逆元素,而不逆序

矩阵中的每个元素中的逆元素,而不逆序
EN

Stack Overflow用户
提问于 2017-04-11 03:53:53
回答 3查看 138关注 0票数 1

使用R,我想反转每列中的所有元素,对于矩阵的一行。我可以将行顺序反转(这不是我想要的),但不能得到行中的元素。

创建示例矩阵

代码语言:javascript
复制
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" 

反转行=中的元素

代码语言:javascript
复制
my.matrix.reversed <- rev(my.matrix[my.matrix[1,], ])

my.matrix[my.matrix1,,]中的错误:下标超出界限

我想得到的是:

代码语言:javascript
复制
[,1]  [,2]  [,3] 
snips "ACC" "CTA" "CTT"
row2  "1"   "2"   "3" 
EN

回答 3

Stack Overflow用户

发布于 2017-04-11 04:05:55

一种方法是使用字符串操作包之一,比如“string i”来反转字符串:

代码语言:javascript
复制
library(stringi)
my.matrix[1, ] <- stri_reverse(my.matrix[1, ])
my.matrix
#       [,1]  [,2]  [,3] 
# snips "ACC" "CTA" "CTT"
# row2  "1"   "2"   "3"  
票数 1
EN

Stack Overflow用户

发布于 2017-04-11 03:56:00

我们可能需要一些字符串操作。假设原始数据集中只有3个字符,我们可以将每个字符作为一个组((.))在sub中捕获,并反转捕获组的顺序(‘\3\2\1’)

代码语言:javascript
复制
my.matrix[1,] <- sub("(.)(.)(.)", "\\3\\2\\1", my.matrix[1,])
my.matrix
#      [,1]  [,2]  [,3] 
#snips "ACC" "CTA" "CTT"
#row2  "1"   "2"   "3"  

一种更普遍的方法是将字符串拆分为单个字符,然后将revpaste返回给它。

代码语言:javascript
复制
my.matrix[1,] <- sapply(strsplit(my.matrix[1,], ""), function(x) paste(rev(x), collapse=""))

或者使用Biostrings

代码语言:javascript
复制
library(Biostrings)
my.matrix[1,] <- reverse(my.matrix[1,])
票数 0
EN

Stack Overflow用户

发布于 2017-04-11 04:07:36

你可以用stringi::stri_reverse。这段代码假定唯一的另一行是row2,并且它只包含单个字符,因此反转并不重要。如果不是这种情况,则只需要将函数应用于snips行。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43336468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档