如何在 R 中同时反转向量的特定范围?
How to reverse specific ranges of a vector at the same time in R?
例如,我有矩阵A
,如下:
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 1 1 1 1
[3,] 1 1 1 1
[4,] 1 1 1 1
[5,] 1 1 1 1
[6,] 1 1 1 1
[7,] 1 1 1 1
[8,] 1 1 -1 -1
[9,] 1 1 -1 -1
[10,] 1 1 -1 -1
[11,] 1 1 -1 -1
[12,] 1 -1 1 -1
[13,] 1 -1 1 -1
[14,] 1 -1 1 -1
[15,] 1 -1 1 -1
[16,] 1 -1 -1 1
[17,] 1 -1 -1 1
[18,] 1 -1 -1 1
[19,] 1 -1 -1 1
使用代码:
Y=unique(A[,3:4])
YY=list()
q=0
for( i in 1:nrow(Y) )
{
a=which(apply(A, 1, function(x) identical(x[3:4], Y[i,])))
if( length(a)>1 )
{
q=q+1
YY[[q]]=a
}}
我获得了矩阵 A 的第 3 列和第 4 列的范围,它们具有相同的元素。
即列表Y
为:
YY
[[1]]
[1] 1 2 3 4 5 6 7
[[2]]
[1] 8 9 10 11
[[3]]
[1] 12 13 14 15
[[4]]
[1] 16 17 18 19
所以,假设我有向量 x=c(1,1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,-1,1,1)
。
由于列表 YY
,x
所需的还原如下:
c(-1,1,1,1,1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,-1)
.
关键是要成功地反转一个矢量,范围尽可能多。
请注意,范围和数量可能会发生变化。
我尝试将 rev()
与 apply()
一起使用,但它不起作用。
有什么想法吗?
尝试
x[unlist(sapply(YY, rev))]
这里实现了对YY
的依赖,当YY
变化时,顺序也会随之变化。
例如,我有矩阵A
,如下:
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 1 1 1 1
[3,] 1 1 1 1
[4,] 1 1 1 1
[5,] 1 1 1 1
[6,] 1 1 1 1
[7,] 1 1 1 1
[8,] 1 1 -1 -1
[9,] 1 1 -1 -1
[10,] 1 1 -1 -1
[11,] 1 1 -1 -1
[12,] 1 -1 1 -1
[13,] 1 -1 1 -1
[14,] 1 -1 1 -1
[15,] 1 -1 1 -1
[16,] 1 -1 -1 1
[17,] 1 -1 -1 1
[18,] 1 -1 -1 1
[19,] 1 -1 -1 1
使用代码:
Y=unique(A[,3:4])
YY=list()
q=0
for( i in 1:nrow(Y) )
{
a=which(apply(A, 1, function(x) identical(x[3:4], Y[i,])))
if( length(a)>1 )
{
q=q+1
YY[[q]]=a
}}
我获得了矩阵 A 的第 3 列和第 4 列的范围,它们具有相同的元素。
即列表Y
为:
YY
[[1]]
[1] 1 2 3 4 5 6 7
[[2]]
[1] 8 9 10 11
[[3]]
[1] 12 13 14 15
[[4]]
[1] 16 17 18 19
所以,假设我有向量 x=c(1,1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,-1,1,1)
。
由于列表 YY
,x
所需的还原如下:
c(-1,1,1,1,1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,-1)
.
关键是要成功地反转一个矢量,范围尽可能多。
请注意,范围和数量可能会发生变化。
我尝试将 rev()
与 apply()
一起使用,但它不起作用。
有什么想法吗?
尝试
x[unlist(sapply(YY, rev))]
这里实现了对YY
的依赖,当YY
变化时,顺序也会随之变化。