R 检查矩阵行中的每两个相邻元素
我对R编码还不熟悉,也许我的问题太简单了 我有一个299*5992维的矩阵“数据”。每个元素为A1或A2 所以我想集中矩阵的信息如下:R 检查矩阵行中的每两个相邻元素,r,matrix,R,Matrix,我对R编码还不熟悉,也许我的问题太简单了 我有一个299*5992维的矩阵“数据”。每个元素为A1或A2 所以我想集中矩阵的信息如下: XD=matrix(,dim(data)[1],(dim(data)[2])/2 ) for ( i in dim(XD)[1]) { for (j in dim(XD)[2]) { if (data[i,2*j]==data[i,2*j-1]) {XD[i,j]=-1} else {XD[i,j]=1 } }
XD=matrix(,dim(data)[1],(dim(data)[2])/2 )
for ( i in dim(XD)[1])
{
for (j in dim(XD)[2])
{
if (data[i,2*j]==data[i,2*j-1])
{XD[i,j]=-1}
else
{XD[i,j]=1
}
}
}
所以我有两个问题:
这是一种只有一个
sapply
循环的方法
编一些数据
set.seed(1234)
data <- matrix(sample(c("A1", "A2"), 96, TRUE), 8)
以下是两种方法:
- 解决方案1(我认为这是比后者更有效的解决方案)
ifelse
:
M <- matrix(ifelse(data[,seq(ncol(data))%%2==1]==data[,seq(ncol(data))%%2==0],-1,1),
nrow = nrow(data))
- 解决方案2
sapply
以及split.default
和data.frame
,如下所示
M <- sapply(split.default(data.frame(data,stringsAsFactors = F),rep(1:(dim(data)[2]/2),1,each=2)),
function(v) ifelse(v[1]==v[2],-1,1))
数据
set.seed(1)
data <- matrix(sample(c("A1", "A2"), 128, TRUE), 4)
set.seed(1)
你根本没有循环的数据,i
和j
都只取一个值,dim(data)[.]
。所以问题是:如果两个相邻的值在行上相等,XD[i,j]
M <- sapply(split.default(data.frame(data,stringsAsFactors = F),rep(1:(dim(data)[2]/2),1,each=2)),
function(v) ifelse(v[1]==v[2],-1,1))
> M
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[1,] 1 1 1 -1 1 -1 1 1 -1 1 1 1 1 -1 1 -1
[2,] 1 1 1 1 1 -1 1 -1 -1 -1 -1 -1 -1 -1 1 1
[3,] -1 -1 1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[4,] -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1
set.seed(1)
data <- matrix(sample(c("A1", "A2"), 128, TRUE), 4)