Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:按列名组合矩阵_R_Matrix - Fatal编程技术网

R:按列名组合矩阵

R:按列名组合矩阵,r,matrix,R,Matrix,矩阵A只是一个有n行和c列的简单矩阵 矩阵B只是一个有n行和d列的简单矩阵 因此,A和B具有相同的行n,但列数不同 但是,有些列是相同的(列的名称和该列中的值) 我需要创建一个矩阵C,这样C只有a和B的相同列 A和B都有colnames(),所以我想这样做,但我相信有一种更快的方法: for (i in 1:ncol(A)){ if(colnames(A)[i] == colnames(B)[i]){ #do magic } } 但是这失败了2个地方,A)显然

矩阵A只是一个有n行和c列的简单矩阵 矩阵B只是一个有n行和d列的简单矩阵

因此,A和B具有相同的行n,但列数不同 但是,有些列是相同的(列的名称和该列中的值)

我需要创建一个矩阵C,这样C只有a和B的相同列

A和B都有colnames(),所以我想这样做,但我相信有一种更快的方法:

for (i in 1:ncol(A)){
    if(colnames(A)[i] == colnames(B)[i]){
        #do magic
    }

}
但是这失败了2个地方,A)显然如果位置不同,那么需要“if(colnames(A)[i]在colnames(B)]”和B)忽略B中不在A中的元素;所以总的来说,这是一个糟糕的方法

我使用了C=intersect(A,B),它也不起作用;它给我的不是我想要的 有什么建议吗


谢谢

您需要调用
intersect
查询名称,并将结果用于索引:

a <- matrix(1:15, 5)
b <- matrix(21:35, 5)
colnames(a) <- c('A', 'B', 'C')
colnames(b) <- c('A', 'C', 'D')

n <- intersect(colnames(a), colnames(b))
cbind(a[,n],b[,n])
##      A  C  A  C
## [1,] 1 11 21 26
## [2,] 2 12 22 27
## [3,] 3 13 23 28
## [4,] 4 14 24 29
## [5,] 5 15 25 30

您需要对名称调用
intersect
,并将结果用于索引:

a <- matrix(1:15, 5)
b <- matrix(21:35, 5)
colnames(a) <- c('A', 'B', 'C')
colnames(b) <- c('A', 'C', 'D')

n <- intersect(colnames(a), colnames(b))
cbind(a[,n],b[,n])
##      A  C  A  C
## [1,] 1 11 21 26
## [2,] 2 12 22 27
## [3,] 3 13 23 28
## [4,] 4 14 24 29
## [5,] 5 15 25 30

您正在寻找
合并
?或
cbind
?你能给出一个你想要的可复制的例子吗?你想要a中的列具有相同的名称,但可能不同的内容,作为B中的列吗?无论如何,请在%colnames(B)中尝试此
colnames(A)%?或
cbind
?你能给出一个你想要的可复制的例子吗?你想要a中的列具有相同的名称,但可能不同的内容,作为B中的列吗?不管怎样,在%colnames(B)
中试试这个
colnames(A)%s这很好,你将名称交叉并将其用作列列表,coocool:)thx这很好,你将名称交叉并将其用作列列表,coocool:)thx