【发布时间】:2020-11-18 16:58:41
【问题描述】:
我很难找到一个有效的代码来匹配矩阵中的行和列,并生成一个包含所有匹配项的新向量。
我有一个非常大的矩阵。例如,假设有一个称为“测试”的矩阵,如下所示:
row <- c("aaa" , "bbb" , "ccc")
column <- paste(rep(row, each = 3) , rep(c(1:3) , times = 3) , sep = "_")
test <- matrix(rexp(90), nrow = 3 , ncol = 9)
colnames(test) <- column
rownames(test) <- row
在我的例子中,这给出了矩阵test:
aaa_1 aaa_2 aaa_3 bbb_1 bbb_2 bbb_3 ccc_1 ccc_2 ccc_3
aaa 0.08695083 0.5360101 0.2151808 0.2623833 0.05368126 3.5040455 0.3966199 1.1790225 0.16178868
bbb 0.26399994 0.2753358 0.3457663 2.1826606 0.73636302 0.8346718 0.9535214 0.4230223 1.59374844
ccc 0.84269411 0.1526342 0.5687740 0.7493685 0.68945927 2.7006906 0.6448158 1.0599139 0.05998212
所以我想创建一个名为test1 的新向量,它匹配具有相同字符串列的行。就我而言,我可以使用:
test1 <- c(test[grep("aaa" , rownames(test)) , grep("aaa" , colnames(test))] ,
test[grep("bbb" , rownames(test)) , grep("bbb" , colnames(test))] ,
test[grep("ccc" , rownames(test)) , grep("ccc", colnames(test))])
names(test1) <- column
这会给我:
aaa_1 aaa_2 aaa_3 bbb_1 bbb_2 bbb_3 ccc_1 ccc_2
0.08695083 0.53601009 0.21518077 2.18266063 0.73636302 0.83467182 0.64481582 1.05991387
ccc_3
0.05998212
但是如果我有一个巨大的矩阵和向量,这段代码就很糟糕。有没有更有效的方法来做到这一点?
另外,在这个例子中,有一个由三个字符组成的字符串,但在我的矩阵中,有不同长度的字符串。感谢您的帮助!
【问题讨论】:
标签: r