在R中替换“矩阵”“数组”数据集中的多个字符串

qv7cva1a  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(92)

我在R中有一个数据集,看起来如下所示:

> class(seqtab)
[1] "matrix" "array"
> str(seqtab)
 int [1:10, 1:9773] 43380 0 5 15 68 39 18 0 0 0 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:10] "DI_Water" "High_Fe" "Low_Fe" "High_Cl" ...
  ..$ : chr [1:9773] "TACGAAGGGGGCTAGCGTTGCTCGGAATCACTGGGCGTAAAGGGCGCGTAGGCGGCGTTTTAAGTCGGGGGTGAAAGCCTGTGGCTCAACCACAGAATGGCCTTCGATACT"| __truncated__ "AACCAGCACCTCGAGTGGTCAGGAGGTTTATTGGGCCTAAAGCATCCGTAGCCGGTTGCATAAGTTTTCGGTTAAATCTATGCGCTTAACGTATAGGCCGCCGAAAATACT"| __truncated__ "TACGTAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGTGCGCAGGCGGTTTTGTAAGACAGAGGTGAAATCCCCGGGCTTAACCTGGGAACTGCCTTTGTGACT"| __truncated__ "TACGGAGGGGGCTAGCGTTGTTCGGAATTACTGGGCGTAAAGCGCACGTAGGCGGCGATTTAAGTCAGAGGTGAAAGCCCGGGGCTCAACCCCGGAATAGCCTTTGAGACT"| __truncated__ ...

我想替换一些字符串以获得如下输出:

> class(seqtab_OK)
[1] "matrix" "array"
> str(seqtab_OK)
 int [1:10, 1:9773] 43380 0 5 15 68 39 18 0 0 0 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:10] "DI_Soil" "High_Iron" "Low_Iron" "High_Cl" ...
  ..$ : chr [1:9773] "TACGAAGGGGGCTAGCGTTGCTCGGAATCACTGGGCGTAAAGGGCGCGTAGGCGGCGTTTTAAGTCGGGGGTGAAAGCCTGTGGCTCAACCACAGAATGGCCTTCGATACT"| __truncated__ "AACCAGCACCTCGAGTGGTCAGGAGGTTTATTGGGCCTAAAGCATCCGTAGCCGGTTGCATAAGTTTTCGGTTAAATCTATGCGCTTAACGTATAGGCCGCCGAAAATACT"| __truncated__ "TACGTAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGTGCGCAGGCGGTTTTGTAAGACAGAGGTGAAATCCCCGGGCTTAACCTGGGAACTGCCTTTGTGACT"| __truncated__ "TACGGAGGGGGCTAGCGTTGTTCGGAATTACTGGGCGTAAAGCGCACGTAGGCGGCGATTTAAGTCAGAGGTGAAAGCCCGGGGCTCAACCCCGGAATAGCCTTTGAGACT"| __truncated__ ...

我试过这段代码,但没有任何变化:

# Define a vector of replacements
replacements <- c(
  "DI_Water" = "DI_Soil",
  "High_Fe" = "High_Iron",
  "Low_Fe" = "Low_Iron"
)

# Replace specified strings in the matrix
seqtab_OK <- seqtab
for (old_str in names(replacements)) {
  new_str <- replacements[old_str]
  seqtab_OK[seqtab_OK == old_str] <- new_str
}

你知道如何得到想要的输出吗?

dxxyhpgq

dxxyhpgq1#

使用一些较小的示例数据:

m <- matrix(1:12, nrow=4, dimnames=list(c("DI_Water","High_Fe","Low_Fe","Other"), NULL))
str(m)
## int [1:4, 1:3] 1 2 3 4 5 6 7 8 9 10 ...
## - attr(*, "dimnames")=List of 2
##  ..$ : chr [1:4] "DI_Water" "High_Fe" "Low_Fe" "Other"
##  ..$ : NULL

使用replacements命名向量替换值:

rin <- rownames(m) %in% names(replacements)
rownames(m)[rin] <- replacements[rownames(m)][rin]

确认结果:

str(m)
## int [1:4, 1:3] 1 2 3 4 5 6 7 8 9 10 ...
## - attr(*, "dimnames")=List of 2
##  ..$ : chr [1:4] "DI_Soil" "High_Iron" "Low_Iron" "Other"
##  ..$ : NULL

相关问题